From 9a9cb17fb757a09ce7318e49a0e44db19021e5bf Mon Sep 17 00:00:00 2001 From: Jonathan Tsai Date: Fri, 19 May 2017 09:39:59 +0800 Subject: [PATCH 01/31] Add Quanta IX2 Platform: 1. Port IX2 platform driver 2. Add class OnlPlatformPortConfig_48x25_8x100 at base.py 3. Port IX2 ONLP: board info 4. Port IX2 ONLP: thermal 5. Port IX2 ONLP: fan 6. Port IX2 ONLP: psu 7. Port IX2 ONLP: sfp 8. Port IX2 ONLP: modify gpio calling from low-level to onlp-lib 9. Port IX2 ONLP: led --- .../src/python/onl/platform/base.py | 4 + .../x86-64-quanta-ix2-rangeley/.gitignore | 2 + .../x86-64-quanta-ix2-rangeley/Makefile | 1 + .../modules/Makefile | 1 + .../modules/PKG.yml | 1 + .../modules/builds/.gitignore | 1 + .../modules/builds/Makefile | 6 + .../modules/builds/quanta_platform_ix2.c | 361 ++++++++++++++++++ .../x86-64-quanta-ix2-rangeley/onlp/Makefile | 1 + .../x86-64-quanta-ix2-rangeley/onlp/PKG.yml | 1 + .../onlp/builds/Makefile | 2 + .../onlp/builds/lib/Makefile | 45 +++ .../onlp/builds/onlpdump/Makefile | 45 +++ .../src/x86_64_quanta_ix2_rangeley/.module | 1 + .../src/x86_64_quanta_ix2_rangeley/Makefile | 9 + .../module/auto/make.mk | 9 + .../auto/x86_64_quanta_ix2_rangeley.yml | 134 +++++++ .../x86_64_quanta_ix2_rangeley.x | 14 + .../x86_64_quanta_ix2_rangeley_config.h | 167 ++++++++ .../x86_64_quanta_ix2_rangeley_dox.h | 26 ++ .../x86_64_quanta_ix2_rangeley_gpio_table.h | 63 +++ .../x86_64_quanta_ix2_rangeley_porting.h | 87 +++++ .../x86_64_quanta_ix2_rangeley/module/make.mk | 10 + .../module/src/Makefile | 9 + .../module/src/fani.c | 172 +++++++++ .../module/src/ledi.c | 229 +++++++++++ .../module/src/make.mk | 9 + .../module/src/psui.c | 118 ++++++ .../module/src/sfpi.c | 222 +++++++++++ .../module/src/sysi.c | 288 ++++++++++++++ .../module/src/thermali.c | 146 +++++++ .../src/x86_64_quanta_ix2_rangeley_config.c | 95 +++++ .../src/x86_64_quanta_ix2_rangeley_enums.c | 10 + .../src/x86_64_quanta_ix2_rangeley_int.h | 308 +++++++++++++++ .../src/x86_64_quanta_ix2_rangeley_log.c | 18 + .../src/x86_64_quanta_ix2_rangeley_log.h | 12 + .../src/x86_64_quanta_ix2_rangeley_module.c | 24 ++ .../src/x86_64_quanta_ix2_rangeley_ucli.c | 50 +++ .../platform-config/Makefile | 1 + .../platform-config/r0/Makefile | 1 + .../platform-config/r0/PKG.yml | 1 + .../src/lib/x86-64-quanta-ix2-rangeley-r0.yml | 31 ++ .../x86_64_quanta_ix2_rangeley_r0/__init__.py | 20 + 43 files changed, 2755 insertions(+) mode change 100644 => 100755 packages/base/all/vendor-config-onl/src/python/onl/platform/base.py create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/.gitignore create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/PKG.yml create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/.gitignore create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/PKG.yml create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/lib/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/onlpdump/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/.module create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/make.mk create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/x86_64_quanta_ix2_rangeley.yml create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley.x create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_config.h create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_dox.h create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_porting.h create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/make.mk create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/fani.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/ledi.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/make.mk create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/psui.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sysi.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/thermali.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_config.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_enums.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_int.h create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.h create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_module.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_ucli.c create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/Makefile create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/PKG.yml create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/lib/x86-64-quanta-ix2-rangeley-r0.yml create mode 100755 packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py diff --git a/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py b/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py old mode 100644 new mode 100755 index 090af42f..d7b78e22 --- a/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py +++ b/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py @@ -487,6 +487,10 @@ class OnlPlatformPortConfig_48x25_6x100(object): PORT_COUNT=54 PORT_CONFIG="48x25 + 6x100" +class OnlPlatformPortConfig_48x25_8x100(object): + PORT_COUNT=56 + PORT_CONFIG="48x25 + 8x100" + class OnlPlatformPortConfig_32x40(object): PORT_COUNT=32 PORT_CONFIG="32x40" diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/.gitignore b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/.gitignore new file mode 100755 index 00000000..05b8d758 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/.gitignore @@ -0,0 +1,2 @@ +*x86*64*quanta*ix2*rangeley.mk +onlpdump.mk diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/Makefile new file mode 100755 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/Makefile new file mode 100755 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/PKG.yml b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/PKG.yml new file mode 100755 index 00000000..5417a2dc --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/PKG.yml @@ -0,0 +1 @@ +!include $ONL_TEMPLATES/platform-modules.yml ARCH=amd64 VENDOR=quanta BASENAME=x86-64-quanta-ix2-rangeley KERNELS="onl-kernel-3.16-lts-x86-64-all:amd64" diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/.gitignore b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/.gitignore new file mode 100755 index 00000000..a65b4177 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/.gitignore @@ -0,0 +1 @@ +lib diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/Makefile new file mode 100755 index 00000000..4af778a2 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/Makefile @@ -0,0 +1,6 @@ +KERNELS := onl-kernel-3.16-lts-x86-64-all:amd64 +KMODULES := $(wildcard *.c) +VENDOR := quanta +BASENAME := x86-64-quanta-ix2-rangeley +ARCH := x86_64 +include $(ONL)/make/kmodule.mk diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c new file mode 100755 index 00000000..0b98b52e --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c @@ -0,0 +1,361 @@ +/* + * Quanta Switch platform driver + * + * + * Copyright (C) 2017 Quanta Computer inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define DRIVER_NAME "quanta-platform-ix2" + +#define MAX_I2C_CLIENTS 512 +#define I2C_GPIO_BASE 0x80 +#define XSTR(x) STR(X) +#define STR(x) #x + +enum i2c_types { + i2c_type_spd, + i2c_type_rtc, + i2c_type_pca9546, + i2c_type_pca9548, + i2c_type_pca9554, + i2c_type_pca9555, + i2c_type_pca9698, + i2c_type_qci_cpld, + i2c_type_24c02, + i2c_type_qci_pmbus_ix2, + i2c_type_quanta_ix2_hwmon, +}; + +char *i2c_type_names[] = { + "spd", + "ds1339", + "pca9546", + "pca9548", + "pca9554", + "pca9555", + "pca9698", + "CPLD-QSFP28", + "24c02", + "qci_pmbus_ix2", + "quanta_ix2_hwmon", +}; + +struct i2c_init_data { + int parent_bus; + int type; + int addr; + int busno; + int gpio_base; + char name[I2C_NAME_SIZE]; +}; + +static struct i2c_init_data quanta_ix2_i2c_init_data[] = { + { .parent_bus = (0x00 + 0), .type = i2c_type_pca9546, .addr = 0x71, .busno = 0x02, .name = "PCA9546(CPU)\0" }, + { .parent_bus = (0x02 + 0), .type = i2c_type_pca9555, .addr = 0x20, .gpio_base = 0x40, .name = "PCA9555_1(CPU)\0" }, + + { .parent_bus = (0x00 + 0), .type = i2c_type_quanta_ix2_hwmon, .addr = 0x4e, .name = "PSoc\0" }, + { .parent_bus = (0x00 + 0), .type = i2c_type_spd, .addr = 0x52, .name = "SPD(DDR3-SODIMM0)\0" }, + { .parent_bus = (0x00 + 0), .type = i2c_type_spd, .addr = 0x53, .name = "SPD(DDR3-SODIMM1)\0" }, + { .parent_bus = (0x00 + 0), .type = i2c_type_pca9546, .addr = 0x77, .busno = 0x10, .name = "PCA9546_1\0" }, + + { .parent_bus = (0x10 + 0), .type = i2c_type_pca9548, .addr = 0x73, .busno = 0x20, .name = "PCA9548_1\0" }, + { .parent_bus = (0x10 + 0), .type = i2c_type_pca9548, .addr = 0x74, .busno = 0x28, .name = "PCA9548_2\0" }, + { .parent_bus = (0x10 + 0), .type = i2c_type_pca9548, .addr = 0x75, .busno = 0x30, .name = "PCA9548_3\0" }, + { .parent_bus = (0x10 + 1), .type = i2c_type_pca9548, .addr = 0x73, .busno = 0x38, .name = "PCA9548_4\0" }, + { .parent_bus = (0x10 + 1), .type = i2c_type_pca9548, .addr = 0x74, .busno = 0x40, .name = "PCA9548_5\0" }, + { .parent_bus = (0x10 + 1), .type = i2c_type_pca9548, .addr = 0x75, .busno = 0x48, .name = "PCA9548_6\0" }, + { .parent_bus = (0x10 + 0), .type = i2c_type_qci_cpld, .addr = 0x38, .name = "qci_cpld(1-16)\0" }, + { .parent_bus = (0x10 + 0), .type = i2c_type_qci_cpld, .addr = 0x39, .name = "qci_cpld(17-32)\0" }, + { .parent_bus = (0x10 + 1), .type = i2c_type_qci_cpld, .addr = 0x38, .name = "qci_cpld(33-48)\0" }, + { .parent_bus = (0x20 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_1_EEPROM\0" }, + { .parent_bus = (0x20 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_2_EEPROM\0" }, + { .parent_bus = (0x20 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_3_EEPROM\0" }, + { .parent_bus = (0x20 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_4_EEPROM\0" }, + { .parent_bus = (0x20 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_5_EEPROM\0" }, + { .parent_bus = (0x20 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_6_EEPROM\0" }, + { .parent_bus = (0x20 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_7_EEPROM\0" }, + { .parent_bus = (0x20 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_8_EEPROM\0" }, + { .parent_bus = (0x28 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_9_EEPROM\0" }, + { .parent_bus = (0x28 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_10_EEPROM\0" }, + { .parent_bus = (0x28 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_11_EEPROM\0" }, + { .parent_bus = (0x28 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_12_EEPROM\0" }, + { .parent_bus = (0x28 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_13_EEPROM\0" }, + { .parent_bus = (0x28 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_14_EEPROM\0" }, + { .parent_bus = (0x28 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_15_EEPROM\0" }, + { .parent_bus = (0x28 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_16_EEPROM\0" }, + { .parent_bus = (0x30 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_17_EEPROM\0" }, + { .parent_bus = (0x30 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_18_EEPROM\0" }, + { .parent_bus = (0x30 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_19_EEPROM\0" }, + { .parent_bus = (0x30 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_20_EEPROM\0" }, + { .parent_bus = (0x30 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_21_EEPROM\0" }, + { .parent_bus = (0x30 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_22_EEPROM\0" }, + { .parent_bus = (0x30 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_23_EEPROM\0" }, + { .parent_bus = (0x30 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_24_EEPROM\0" }, + { .parent_bus = (0x38 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_25_EEPROM\0" }, + { .parent_bus = (0x38 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_26_EEPROM\0" }, + { .parent_bus = (0x38 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_27_EEPROM\0" }, + { .parent_bus = (0x38 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_28_EEPROM\0" }, + { .parent_bus = (0x38 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_29_EEPROM\0" }, + { .parent_bus = (0x38 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_30_EEPROM\0" }, + { .parent_bus = (0x38 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_31_EEPROM\0" }, + { .parent_bus = (0x38 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_32_EEPROM\0" }, + { .parent_bus = (0x40 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_33_EEPROM\0" }, + { .parent_bus = (0x40 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_34_EEPROM\0" }, + { .parent_bus = (0x40 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_35_EEPROM\0" }, + { .parent_bus = (0x40 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_36_EEPROM\0" }, + { .parent_bus = (0x40 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_37_EEPROM\0" }, + { .parent_bus = (0x40 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_38_EEPROM\0" }, + { .parent_bus = (0x40 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_39_EEPROM\0" }, + { .parent_bus = (0x40 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_40_EEPROM\0" }, + { .parent_bus = (0x48 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_41_EEPROM\0" }, + { .parent_bus = (0x48 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_42_EEPROM\0" }, + { .parent_bus = (0x48 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_43_EEPROM\0" }, + { .parent_bus = (0x48 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_44_EEPROM\0" }, + { .parent_bus = (0x48 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_45_EEPROM\0" }, + { .parent_bus = (0x48 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_46_EEPROM\0" }, + { .parent_bus = (0x48 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_47_EEPROM\0" }, + { .parent_bus = (0x48 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "SFP_48_EEPROM\0" }, + + { .parent_bus = (0x10 + 2), .type = i2c_type_pca9548, .addr = 0x73, .busno = 0x50, .name = "PCA9548_7\0" }, + { .parent_bus = (0x10 + 1), .type = i2c_type_pca9698, .addr = 0x21, .gpio_base = 0x50, .name = "PCA9698(QSFP_1-8)\0" }, + { .parent_bus = (0x50 + 0), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_1_EEPROM\0" }, + { .parent_bus = (0x50 + 1), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_2_EEPROM\0" }, + { .parent_bus = (0x50 + 2), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_3_EEPROM\0" }, + { .parent_bus = (0x50 + 3), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_4_EEPROM\0" }, + { .parent_bus = (0x50 + 4), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_5_EEPROM\0" }, + { .parent_bus = (0x50 + 5), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_6_EEPROM\0" }, + { .parent_bus = (0x50 + 6), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_7_EEPROM\0" }, + { .parent_bus = (0x50 + 7), .type = i2c_type_24c02, .addr = 0x50, .name = "QSFP_8_EEPROM\0" }, + + { .parent_bus = (0x00 + 0), .type = i2c_type_pca9546, .addr = 0x72, .busno = 0x14, .name = "PCA9546_2\0" }, + { .parent_bus = (0x14 + 0), .type = i2c_type_qci_pmbus_ix2, .addr = 0x5f, .name = "PSU_1\0" }, + { .parent_bus = (0x14 + 1), .type = i2c_type_qci_pmbus_ix2, .addr = 0x59, .name = "PSU_2\0" }, + { .parent_bus = (0x14 + 2), .type = i2c_type_pca9555, .addr = 0x26, .gpio_base = 0x10, .name = "PCA9555-1(PSU)\0" }, + { .parent_bus = (0x14 + 2), .type = i2c_type_24c02, .addr = 0x54, .name = "Board_EEPROM\0" }, + { .parent_bus = (0x14 + 2), .type = i2c_type_pca9555, .addr = 0x23, .gpio_base = 0x20, .name = "PCA9555-2(Board ID)\0" }, + { .parent_bus = (0x14 + 3), .type = i2c_type_pca9555, .addr = 0x25, .gpio_base = 0x30, .name = "PCA9555-3(FAN IO)\0" }, + { .parent_bus = (0x14 + 3), .type = i2c_type_pca9555, .addr = 0x26, .name = "PCA9555-6(BMC)\0" }, +}; + +static inline struct pca954x_platform_data *pca954x_platform_data_get(int type, int busno) { + static struct pca954x_platform_mode platform_modes[8]; + static struct pca954x_platform_data platform_data; + int num_modes, i; + + switch(type) { + case i2c_type_pca9546: + num_modes = 4; + break; + + case i2c_type_pca9548: + num_modes = 8; + break; + + default: + return (struct pca954x_platform_data *) NULL; + break; + } + + for(i=0;i +# +# Copyright 2014 BigSwitch Networks, Inc. +# +# Licensed under the Eclipse Public License, Version 1.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.eclipse.org/legal/epl-v10.html +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the +# License. +# +# +############################################################ +# +# +############################################################ +include $(ONL)/make/config.amd64.mk + +MODULE := libonlp-x86-64-quanta-ix2-rangeley +include $(BUILDER)/standardinit.mk + +DEPENDMODULES := AIM IOF x86_64_quanta_ix2_rangeley quanta_sys_eeprom onlplib +DEPENDMODULE_HEADERS := sff + +include $(BUILDER)/dependmodules.mk + +SHAREDLIB := libonlp-x86-64-quanta-ix2-rangeley.so +$(SHAREDLIB)_TARGETS := $(ALL_TARGETS) +include $(BUILDER)/so.mk +.DEFAULT_GOAL := $(SHAREDLIB) + +GLOBAL_CFLAGS += -I$(onlp_BASEDIR)/module/inc +GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1 +GLOBAL_CFLAGS += -fPIC +GLOBAL_LINK_LIBS += -lpthread + +include $(BUILDER)/targets.mk + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/onlpdump/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/onlpdump/Makefile new file mode 100755 index 00000000..d0b7317b --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/onlpdump/Makefile @@ -0,0 +1,45 @@ +############################################################ +# +# +# Copyright 2014 BigSwitch Networks, Inc. +# +# Licensed under the Eclipse Public License, Version 1.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.eclipse.org/legal/epl-v10.html +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the +# License. +# +# +############################################################ +# +# +# +############################################################ +include $(ONL)/make/config.amd64.mk + +.DEFAULT_GOAL := onlpdump + +MODULE := onlpdump +include $(BUILDER)/standardinit.mk + +DEPENDMODULES := AIM IOF onlp x86_64_quanta_ix2_rangeley quanta_sys_eeprom onlplib onlp_platform_defaults sff cjson cjson_util timer_wheel OS + +include $(BUILDER)/dependmodules.mk + +BINARY := onlpdump +$(BINARY)_LIBRARIES := $(LIBRARY_TARGETS) +include $(BUILDER)/bin.mk + +GLOBAL_CFLAGS += -DAIM_CONFIG_AIM_MAIN_FUNCTION=onlpdump_main +GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1 +GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MAIN=1 +GLOBAL_LINK_LIBS += -lpthread -lm + +include $(BUILDER)/targets.mk diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/.module b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/.module new file mode 100755 index 00000000..dd498b7f --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/.module @@ -0,0 +1 @@ +name: x86_64_quanta_ix2_rangeley diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/Makefile new file mode 100755 index 00000000..e371c7e4 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/Makefile @@ -0,0 +1,9 @@ +############################################################################### +# +# +# +############################################################################### +include $(ONL)/make/config.mk +MODULE := x86_64_quanta_ix2_rangeley +AUTOMODULE := x86_64_quanta_ix2_rangeley +include $(BUILDER)/definemodule.mk diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/make.mk b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/make.mk new file mode 100755 index 00000000..83066587 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/make.mk @@ -0,0 +1,9 @@ +############################################################################### +# +# x86_64_quanta_ix2_rangeley Autogeneration +# +############################################################################### +x86_64_quanta_ix2_rangeley_AUTO_DEFS := module/auto/x86_64_quanta_ix2_rangeley.yml +x86_64_quanta_ix2_rangeley_AUTO_DIRS := module/inc/x86_64_quanta_ix2_rangeley module/src +include $(BUILDER)/auto.mk + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/x86_64_quanta_ix2_rangeley.yml b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/x86_64_quanta_ix2_rangeley.yml new file mode 100755 index 00000000..9774022e --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/auto/x86_64_quanta_ix2_rangeley.yml @@ -0,0 +1,134 @@ +############################################################################### +# +# x86_64_quanta_ix2_rangeley Autogeneration Definitions. +# +############################################################################### + +cdefs: &cdefs +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING: + doc: "Include or exclude logging." + default: 1 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT: + doc: "Default enabled log options." + default: AIM_LOG_OPTIONS_DEFAULT +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT: + doc: "Default enabled log bits." + default: AIM_LOG_BITS_DEFAULT +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT: + doc: "Default enabled custom log bits." + default: 0 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB: + doc: "Default all porting macros to use the C standard libraries." + default: 1 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS: + doc: "Include standard library headers for stdlib porting macros." + default: X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI: + doc: "Include generic uCli support." + default: 0 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD: + doc: "RPM Threshold at which the fan is considered to have failed." + default: 3000 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX: + doc: "Maximum system front-to-back fan speed." + default: 18000 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX: + doc: "Maximum system back-to-front fan speed." + default: 18000 +- X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS: + doc: "Time to hold Phy GPIO in reset, in ms" + default: 100 + +definitions: + cdefs: + X86_64_QUANTA_IX2_RANGELEY_CONFIG_HEADER: + defs: *cdefs + basename: x86_64_quanta_ix2_rangeley_config + + enum: &enums + + fan_id: + members: + - FAN1 : 1 + - FAN2 : 2 + - FAN3 : 3 + - FAN4 : 4 + - FAN5 : 5 + - FAN6 : 6 + - FAN7 : 7 + - FAN8 : 8 + - FAN9 : 9 + - FAN10 : 10 + + fan_oid: + members: + - FAN1 : ONLP_FAN_ID_CREATE(1) + - FAN2 : ONLP_FAN_ID_CREATE(2) + - FAN3 : ONLP_FAN_ID_CREATE(3) + - FAN4 : ONLP_FAN_ID_CREATE(4) + - FAN5 : ONLP_FAN_ID_CREATE(5) + - FAN6 : ONLP_FAN_ID_CREATE(6) + - FAN7 : ONLP_FAN_ID_CREATE(7) + - FAN8 : ONLP_FAN_ID_CREATE(8) + - FAN9 : ONLP_FAN_ID_CREATE(9) + - FAN10 : ONLP_FAN_ID_CREATE(10) + + psu_id: + members: + - PSU1 : 1 + - PSU2 : 2 + + psu_oid: + members: + - PSU1 : ONLP_PSU_ID_CREATE(1) + - PSU2 : ONLP_PSU_ID_CREATE(2) + + thermal_id: + members: + - THERMAL1 : 1 + - THERMAL2 : 2 + - THERMAL3 : 3 + - THERMAL4 : 4 + - THERMAL5 : 5 + - THERMAL6 : 6 + - THERMAL7 : 7 + - THERMAL8 : 8 + - THERMAL9 : 9 + - THERMAL10 : 10 + - THERMAL11 : 11 + - THERMAL12 : 12 + - THERMAL13 : 13 + - THERMAL14 : 14 + - THERMAL15 : 15 + - THERMAL16 : 16 + + + thermal_oid: + members: + - THERMAL1 : ONLP_THERMAL_ID_CREATE(1) + - THERMAL2 : ONLP_THERMAL_ID_CREATE(2) + - THERMAL3 : ONLP_THERMAL_ID_CREATE(3) + - THERMAL4 : ONLP_THERMAL_ID_CREATE(4) + - THERMAL5 : ONLP_THERMAL_ID_CREATE(5) + - THERMAL6 : ONLP_THERMAL_ID_CREATE(6) + - THERMAL7 : ONLP_THERMAL_ID_CREATE(7) + - THERMAL8 : ONLP_THERMAL_ID_CREATE(8) + - THERMAL9 : ONLP_THERMAL_ID_CREATE(9) + - THERMAL10 : ONLP_THERMAL_ID_CREATE(10) + - THERMAL11 : ONLP_THERMAL_ID_CREATE(11) + - THERMAL12 : ONLP_THERMAL_ID_CREATE(12) + - THERMAL13 : ONLP_THERMAL_ID_CREATE(13) + - THERMAL14 : ONLP_THERMAL_ID_CREATE(14) + - THERMAL15 : ONLP_THERMAL_ID_CREATE(15) + - THERMAL16 : ONLP_THERMAL_ID_CREATE(16) + + + portingmacro: + X86_64_QUANTA_IX2_RANGELEY: + macros: + - memset + - memcpy + - strncpy + - vsnprintf + - snprintf + - strlen diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley.x b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley.x new file mode 100755 index 00000000..abaf5abf --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley.x @@ -0,0 +1,14 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +/* <--auto.start.xmacro(ALL).define> */ +/* */ + +/* <--auto.start.xenum(ALL).define> */ +/* */ + + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_config.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_config.h new file mode 100755 index 00000000..ecc11080 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_config.h @@ -0,0 +1,167 @@ +/**************************************************************************//** + * + * @file + * @brief x86_64_quanta_ix2_rangeley Configuration Header + * + * @addtogroup x86_64_quanta_ix2_rangeley-config + * @{ + * + *****************************************************************************/ +#ifndef __X86_64_QUANTA_IX2_RANGELEY_CONFIG_H__ +#define __X86_64_QUANTA_IX2_RANGELEY_CONFIG_H__ + +#ifdef GLOBAL_INCLUDE_CUSTOM_CONFIG +#include +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_INCLUDE_CUSTOM_CONFIG +#include +#endif + +/* */ +#include +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING + * + * Include or exclude logging. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING 1 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT + * + * Default enabled log options. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT AIM_LOG_OPTIONS_DEFAULT +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT + * + * Default enabled log bits. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT AIM_LOG_BITS_DEFAULT +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT + * + * Default enabled custom log bits. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT 0 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB + * + * Default all porting macros to use the C standard libraries. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB 1 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS + * + * Include standard library headers for stdlib porting macros. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI + * + * Include generic uCli support. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI 0 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD + * + * RPM Threshold at which the fan is considered to have failed. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD 3000 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX + * + * Maximum system front-to-back fan speed. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX 18000 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX + * + * Maximum system back-to-front fan speed. */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX 18000 +#endif + +/** + * X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS + * + * Time to hold Phy GPIO in reset, in ms */ + + +#ifndef X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS +#define X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS 100 +#endif + + + +/** + * All compile time options can be queried or displayed + */ + +/** Configuration settings structure. */ +typedef struct x86_64_quanta_ix2_rangeley_config_settings_s { + /** name */ + const char* name; + /** value */ + const char* value; +} x86_64_quanta_ix2_rangeley_config_settings_t; + +/** Configuration settings table. */ +/** x86_64_quanta_ix2_rangeley_config_settings table. */ +extern x86_64_quanta_ix2_rangeley_config_settings_t x86_64_quanta_ix2_rangeley_config_settings[]; + +/** + * @brief Lookup a configuration setting. + * @param setting The name of the configuration option to lookup. + */ +const char* x86_64_quanta_ix2_rangeley_config_lookup(const char* setting); + +/** + * @brief Show the compile-time configuration. + * @param pvs The output stream. + */ +int x86_64_quanta_ix2_rangeley_config_show(struct aim_pvs_s* pvs); + +/* */ + +#include "x86_64_quanta_ix2_rangeley_porting.h" + +#endif /* __X86_64_QUANTA_IX2_RANGELEY_CONFIG_H__ */ +/* @} */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_dox.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_dox.h new file mode 100755 index 00000000..871a3c0b --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_dox.h @@ -0,0 +1,26 @@ +/**************************************************************************//** + * + * x86_64_quanta_ix2_rangeley Doxygen Header + * + *****************************************************************************/ +#ifndef __X86_64_QUANTA_IX2_RANGELEY_DOX_H__ +#define __X86_64_QUANTA_IX2_RANGELEY_DOX_H__ + +/** + * @defgroup x86_64_quanta_ix2_rangeley x86_64_quanta_ix2_rangeley - x86_64_quanta_ix2_rangeley Description + * + +The documentation overview for this module should go here. + + * + * @{ + * + * @defgroup x86_64_quanta_ix2_rangeley-x86_64_quanta_ix2_rangeley Public Interface + * @defgroup x86_64_quanta_ix2_rangeley-config Compile Time Configuration + * @defgroup x86_64_quanta_ix2_rangeley-porting Porting Macros + * + * @} + * + */ + +#endif /* __X86_64_QUANTA_IX2_RANGELEY_DOX_H__ */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h new file mode 100755 index 00000000..053b4606 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h @@ -0,0 +1,63 @@ +#ifndef __X86_64_QUANTA_IX2_RANGELEY_GPIO_TABLE_H__ +#define __X86_64_QUANTA_IX2_RANGELEY_GPIO_TABLE_H__ + +/* + * defined within platform/quanta_switch.c + * Quanta Switch Platform driver + */ +#define QUANTA_IX2_PCA953x_GPIO(P1, P2) (P1*8+P2) + +#define QUANTA_IX2_PCA9555_GPIO_SIZE 0x10 + +#define QUANTA_IX2_I2C_GPIO_CPU_BASE 0x40 + +#define QUANTA_IX2_CPU_BOARD_GPIO_BASE (QUANTA_IX2_I2C_GPIO_CPU_BASE) +#define QUANTA_IX2_CPU_BOARD_SYS_P1 (QUANTA_IX2_CPU_BOARD_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,2)) +#define QUANTA_IX2_CPU_BOARD_SYS_P2 (QUANTA_IX2_CPU_BOARD_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,3)) + +#define QUANTA_IX2_PSU_GPIO_BASE 0x10 +#define QUANTA_IX2_PSU_GPIO_SIZE QUANTA_IX2_PCA9555_GPIO_SIZE +#define QUANTA_IX2_PSU_GPIO_PSU1_PRSNT_N (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,0)) +#define QUANTA_IX2_PSU_GPIO_PSU1_PWRGD (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,1)) +#define QUANTA_IX2_PSU_GPIO_PSU2_PRSNT_N (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,3)) +#define QUANTA_IX2_PSU_GPIO_PSU2_PWRGD (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,4)) +#define QUANTA_IX2_PSU_GPIO_PSU1_AC_OK (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,6)) +#define QUANTA_IX2_PSU_GPIO_PSU2_AC_OK (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,7)) +#define QUANTA_IX2_PSU_GPIO_PSU1_GREEN_R (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,2)) +#define QUANTA_IX2_PSU_GPIO_PSU1_RED_R (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,3)) +#define QUANTA_IX2_PSU_GPIO_PSU2_GREEN_R (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,4)) +#define QUANTA_IX2_PSU_GPIO_PSU2_RED_R (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,5)) +#define QUANTA_IX2_PSU_GPIO_FAN_GREEN_R (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,6)) +#define QUANTA_IX2_PSU_GPIO_FAN_RED_R (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,7)) + +#define QUANTA_IX2_ZQSFP_EN_GPIO_BASE (QUANTA_IX2_PSU_GPIO_BASE + QUANTA_IX2_PSU_GPIO_SIZE) +#define QUANTA_IX2_ZQSFP_EN_GPIO_SIZE QUANTA_IX2_PCA9555_GPIO_SIZE +#define QUANTA_IX2_ZQSFP_EN_GPIO_P3V3_PW_GD (QUANTA_IX2_ZQSFP_EN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,4)) +#define QUANTA_IX2_ZQSFP_EN_GPIO_P3V3_PW_EN (QUANTA_IX2_ZQSFP_EN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,5)) + +#define QUANTA_IX2_FAN_GPIO_BASE (QUANTA_IX2_ZQSFP_EN_GPIO_BASE + QUANTA_IX2_ZQSFP_EN_GPIO_SIZE) +#define QUANTA_IX2_FAN_GPIO_SIZE QUANTA_IX2_PCA9555_GPIO_SIZE +#define QUANTA_IX2_FAN_PRSNT_N_1 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,4)) +#define QUANTA_IX2_FAN_PRSNT_N_2 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,5)) +#define QUANTA_IX2_FAN_PRSNT_N_3 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,6)) +#define QUANTA_IX2_FAN_PRSNT_N_4 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,7)) +#define QUANTA_IX2_FAN_BF_DET1 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,0)) +#define QUANTA_IX2_FAN_BF_DET2 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,1)) +#define QUANTA_IX2_FAN_BF_DET3 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,2)) +#define QUANTA_IX2_FAN_BF_DET4 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,3)) +#define QUANTA_IX2_FAN_FAIL_LED_1 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,4)) +#define QUANTA_IX2_FAN_FAIL_LED_2 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,5)) +#define QUANTA_IX2_FAN_FAIL_LED_3 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,6)) +#define QUANTA_IX2_FAN_FAIL_LED_4 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,7)) + +#define QUANTA_IX2_PCA9698_1_GPIO_BASE 0x50 +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_1_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_2_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_3_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_4_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_5_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_6_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_7_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_8_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,6)) + +#endif /* __X86_64_QUANTA_IX2_RANGELEY_GPIO_TABLE_H__ */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_porting.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_porting.h new file mode 100755 index 00000000..f98fe673 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_porting.h @@ -0,0 +1,87 @@ +/**************************************************************************//** + * + * @file + * @brief x86_64_quanta_ix2_rangeley Porting Macros. + * + * @addtogroup x86_64_quanta_ix2_rangeley-porting + * @{ + * + *****************************************************************************/ +#ifndef __X86_64_QUANTA_IX2_RANGELEY_PORTING_H__ +#define __X86_64_QUANTA_IX2_RANGELEY_PORTING_H__ + + +/* */ +#if X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS == 1 +#include +#include +#include +#include +#include +#endif + +#ifndef X86_64_QUANTA_IX2_RANGELEY_MEMSET + #if defined(GLOBAL_MEMSET) + #define X86_64_QUANTA_IX2_RANGELEY_MEMSET GLOBAL_MEMSET + #elif X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB == 1 + #define X86_64_QUANTA_IX2_RANGELEY_MEMSET memset + #else + #error The macro X86_64_QUANTA_IX2_RANGELEY_MEMSET is required but cannot be defined. + #endif +#endif + +#ifndef X86_64_QUANTA_IX2_RANGELEY_MEMCPY + #if defined(GLOBAL_MEMCPY) + #define X86_64_QUANTA_IX2_RANGELEY_MEMCPY GLOBAL_MEMCPY + #elif X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB == 1 + #define X86_64_QUANTA_IX2_RANGELEY_MEMCPY memcpy + #else + #error The macro X86_64_QUANTA_IX2_RANGELEY_MEMCPY is required but cannot be defined. + #endif +#endif + +#ifndef X86_64_QUANTA_IX2_RANGELEY_STRNCPY + #if defined(GLOBAL_STRNCPY) + #define X86_64_QUANTA_IX2_RANGELEY_STRNCPY GLOBAL_STRNCPY + #elif X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB == 1 + #define X86_64_QUANTA_IX2_RANGELEY_STRNCPY strncpy + #else + #error The macro X86_64_QUANTA_IX2_RANGELEY_STRNCPY is required but cannot be defined. + #endif +#endif + +#ifndef X86_64_QUANTA_IX2_RANGELEY_VSNPRINTF + #if defined(GLOBAL_VSNPRINTF) + #define X86_64_QUANTA_IX2_RANGELEY_VSNPRINTF GLOBAL_VSNPRINTF + #elif X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB == 1 + #define X86_64_QUANTA_IX2_RANGELEY_VSNPRINTF vsnprintf + #else + #error The macro X86_64_QUANTA_IX2_RANGELEY_VSNPRINTF is required but cannot be defined. + #endif +#endif + +#ifndef X86_64_QUANTA_IX2_RANGELEY_SNPRINTF + #if defined(GLOBAL_SNPRINTF) + #define X86_64_QUANTA_IX2_RANGELEY_SNPRINTF GLOBAL_SNPRINTF + #elif X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB == 1 + #define X86_64_QUANTA_IX2_RANGELEY_SNPRINTF snprintf + #else + #error The macro X86_64_QUANTA_IX2_RANGELEY_SNPRINTF is required but cannot be defined. + #endif +#endif + +#ifndef X86_64_QUANTA_IX2_RANGELEY_STRLEN + #if defined(GLOBAL_STRLEN) + #define X86_64_QUANTA_IX2_RANGELEY_STRLEN GLOBAL_STRLEN + #elif X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB == 1 + #define X86_64_QUANTA_IX2_RANGELEY_STRLEN strlen + #else + #error The macro X86_64_QUANTA_IX2_RANGELEY_STRLEN is required but cannot be defined. + #endif +#endif + +/* */ + + +#endif /* __X86_64_QUANTA_IX2_RANGELEY_PORTING_H__ */ +/* @} */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/make.mk b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/make.mk new file mode 100755 index 00000000..ad096ba5 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/make.mk @@ -0,0 +1,10 @@ +############################################################################### +# +# +# +############################################################################### +THIS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) +x86_64_quanta_ix2_rangeley_INCLUDES := -I $(THIS_DIR)inc +x86_64_quanta_ix2_rangeley_INTERNAL_INCLUDES := -I $(THIS_DIR)src +x86_64_quanta_ix2_rangeley_DEPENDMODULE_ENTRIES := init:x86_64_quanta_ix2_rangeley ucli:x86_64_quanta_ix2_rangeley + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/Makefile new file mode 100755 index 00000000..aa08362c --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/Makefile @@ -0,0 +1,9 @@ +############################################################################### +# +# Local source generation targets. +# +############################################################################### + +ucli: + @../../../../tools/uclihandlers.py x86_64_quanta_ix2_rangeley_ucli.c + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/fani.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/fani.c new file mode 100755 index 00000000..184e7199 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/fani.c @@ -0,0 +1,172 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include + +#include "x86_64_quanta_ix2_rangeley_int.h" +#include "x86_64_quanta_ix2_rangeley_log.h" + +#include +#include + +int +onlp_fani_init(void) +{ + return ONLP_STATUS_OK; +} + +struct fan_gpio_s { + int present; + int fan_dir_detect; +}; + +static struct fan_gpio_s fan_gpio[] = { + {}, /* Not used */ + { .present = QUANTA_IX2_FAN_PRSNT_N_1, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET1 }, + { .present = QUANTA_IX2_FAN_PRSNT_N_2, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET2 }, + { .present = QUANTA_IX2_FAN_PRSNT_N_3, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET3 }, + { .present = QUANTA_IX2_FAN_PRSNT_N_4, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET4 }, + //{}, /* Not used */ + { .present = QUANTA_IX2_FAN_PRSNT_N_1, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET1 }, + { .present = QUANTA_IX2_FAN_PRSNT_N_2, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET2 }, + { .present = QUANTA_IX2_FAN_PRSNT_N_3, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET3 }, + { .present = QUANTA_IX2_FAN_PRSNT_N_4, .fan_dir_detect = QUANTA_IX2_FAN_BF_DET4 }, + //{}, /* Not used */ +}; + +static int +sys_fan_info_get__(onlp_fan_info_t* info, int id) +{ + int value = 0; + int rv; + + if(onlp_gpio_get(fan_gpio[id].present, &value) == ONLP_STATUS_OK + && value == 0) { + info->status = ONLP_FAN_STATUS_PRESENT; + if(onlp_gpio_get(fan_gpio[id].fan_dir_detect, &value) == ONLP_STATUS_OK + && value == 0) { + info->status |= ONLP_FAN_STATUS_F2B; + info->caps |= ONLP_FAN_CAPS_F2B; + } + else { + info->status |= ONLP_FAN_STATUS_B2F; + info->caps |= ONLP_FAN_CAPS_B2F; + } + } + else { + info->status = ONLP_FAN_STATUS_FAILED; + } + + rv = onlp_file_read_int(&info->rpm, + SYS_HWMON_PREFIX "/fan%d_input", id); + + if(rv == ONLP_STATUS_E_INTERNAL) { + return rv; + } + + if(rv == ONLP_STATUS_E_MISSING) { + info->status &= ~1; + return 0; + } + + if(info->rpm <= X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD) { + info->status |= ONLP_FAN_STATUS_FAILED; + } + + /* + * Calculate percentage based on current speed and the maximum. + */ + info->caps |= ONLP_FAN_CAPS_GET_PERCENTAGE; + if(info->status & ONLP_FAN_STATUS_F2B) { + info->percentage = (int) ((double) info->rpm * (double)100 / (double)X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX); + } + if(info->status & ONLP_FAN_STATUS_B2F) { + info->percentage = (int) ((double) info->rpm * (double)100 / (double)X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX); + } + + return 0; +} + +static int +psu_fan_info_get__(onlp_fan_info_t* info, int id) +{ + extern struct psu_info_s psu_info[]; + char* dir = psu_info[id].path; + + return onlp_file_read_int(&info->rpm, "%s*fan1_input", dir); +} + + +/* Onboard Fans */ +static onlp_fan_info_t fans__[] = { + { }, /* Not used */ + { { FAN_OID_FAN1, "Left (Module/Fan 1/1)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN2, "Center-L(Module/Fan 2/1)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN3, "Center-R(Module/Fan 3/1)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN4, "Right (Module/Fan 4/1)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN5, "Left (Module/Fan 1/2)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN6, "Center-L(Module/Fan 2/2)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN7, "Center-R(Module/Fan 3/2)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN8, "Right (Module/Fan 4/2)", 0}, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN9, "PSU-1 Fan", 0 }, ONLP_FAN_STATUS_PRESENT }, + { { FAN_OID_FAN10, "PSU-2 Fan", 0 }, ONLP_FAN_STATUS_PRESENT }, + +}; + +int +onlp_fani_info_get(onlp_oid_t id, onlp_fan_info_t* rv) +{ + int fid = ONLP_OID_ID_GET(id); + + *rv = fans__[ONLP_OID_ID_GET(id)]; + rv->caps |= ONLP_FAN_CAPS_GET_RPM; + + switch(fid) { + case FAN_ID_FAN1: + case FAN_ID_FAN2: + case FAN_ID_FAN3: + case FAN_ID_FAN4: + case FAN_ID_FAN5: + case FAN_ID_FAN6: + case FAN_ID_FAN7: + case FAN_ID_FAN8: + return sys_fan_info_get__(rv, fid); + break; + + case FAN_ID_FAN9: + case FAN_ID_FAN10: + return psu_fan_info_get__(rv, fid - FAN_ID_FAN9 + 1); + break; + + default: + return ONLP_STATUS_E_INVALID; + break; + } + + return ONLP_STATUS_E_INVALID; +} + + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/ledi.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/ledi.c new file mode 100755 index 00000000..2b616aad --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/ledi.c @@ -0,0 +1,229 @@ +#include +#include +#include +#include +#include + +#include "x86_64_quanta_ix2_rangeley_int.h" +#include +#include + +/* + * Get the information for the given LED OID. + */ +static onlp_led_info_t led_info[] = +{ + { }, /* Not used */ + { + { LED_OID_SYSTEM, "System LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE | ONLP_LED_CAPS_GREEN, + }, + { + { LED_OID_FAN, "Front FAN LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED | ONLP_LED_CAPS_GREEN, + }, + { + { LED_OID_PSU_1, "Front PSU(1) LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED | ONLP_LED_CAPS_GREEN, + }, + { + { LED_OID_PSU_2, "Front PSU(2) LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED | ONLP_LED_CAPS_GREEN, + }, + { + { LED_OID_FAN_FAIL_1, "FAN(1) fail LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED, + }, + { + { LED_OID_FAN_FAIL_2, "FAN(2) fail LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED, + }, + { + { LED_OID_FAN_FAIL_3, "FAN(3) fail LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED, + }, + { + { LED_OID_FAN_FAIL_4, "FAN(4) fail LED", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_RED, + } +}; + +int +onlp_ledi_init(void) +{ + return ONLP_STATUS_OK; +} + +int +onlp_ledi_info_get(onlp_oid_t id, onlp_led_info_t* info) +{ + + int led_id; + + led_id = ONLP_OID_ID_GET(id); + + *info = led_info[led_id]; + info->status |= ONLP_LED_STATUS_ON; + info->mode |= ONLP_LED_MODE_ON; + + return ONLP_STATUS_OK; +} + +void +Sysfs_Set_System_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_GREEN){ + onlp_gpio_set(QUANTA_IX2_CPU_BOARD_SYS_P1, 0); + onlp_gpio_set(QUANTA_IX2_CPU_BOARD_SYS_P2, 1); + } + else if(mode == ONLP_LED_MODE_ORANGE){ + onlp_gpio_set(QUANTA_IX2_CPU_BOARD_SYS_P1, 1); + onlp_gpio_set(QUANTA_IX2_CPU_BOARD_SYS_P2, 0); + } + else{ + onlp_gpio_set(QUANTA_IX2_CPU_BOARD_SYS_P1, 1); + onlp_gpio_set(QUANTA_IX2_CPU_BOARD_SYS_P2, 1); + } +} + +void +Sysfs_Set_Fan_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_GREEN){ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_FAN_GREEN_R, 1); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_FAN_RED_R, 0); + } + else if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_FAN_GREEN_R, 0); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_FAN_RED_R, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_FAN_GREEN_R, 0); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_FAN_RED_R, 0); + } +} + +void +Sysfs_Set_Psu1_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_GREEN){ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU1_GREEN_R, 1); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU1_RED_R, 0); + } + else if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU1_GREEN_R, 0); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU1_RED_R, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU1_GREEN_R, 0); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU1_RED_R, 0); + } +} + +void +Sysfs_Set_Psu2_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_GREEN){ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU2_GREEN_R, 1); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU2_RED_R, 0); + } + else if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU2_GREEN_R, 0); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU2_RED_R, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU2_GREEN_R, 0); + onlp_gpio_set(QUANTA_IX2_PSU_GPIO_PSU2_RED_R, 0); + } +} + +void +Sysfs_Set_Fan_Fail1_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_1, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_1, 0); + } +} + +void +Sysfs_Set_Fan_Fail2_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_2, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_2, 0); + } +} + +void +Sysfs_Set_Fan_Fail3_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_3, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_3, 0); + } +} + +void +Sysfs_Set_Fan_Fail4_LED(onlp_led_mode_t mode) +{ + if(mode == ONLP_LED_MODE_RED){ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_4, 1); + } + else{ + onlp_gpio_set(QUANTA_IX2_FAN_FAIL_LED_4, 0); + } +} + +int +onlp_ledi_mode_set(onlp_oid_t id, onlp_led_mode_t mode) +{ + int led_id; + + led_id = ONLP_OID_ID_GET(id); + switch (led_id) { + case LED_ID_SYSTEM: + Sysfs_Set_System_LED(mode); + break; + case LED_ID_FAN: + Sysfs_Set_Fan_LED(mode); + break; + case LED_ID_PSU_1: + Sysfs_Set_Psu1_LED(mode); + break; + case LED_ID_PSU_2: + Sysfs_Set_Psu2_LED(mode); + break; + case LED_ID_FAN_FAIL_1: + Sysfs_Set_Fan_Fail1_LED(mode); + break; + case LED_ID_FAN_FAIL_2: + Sysfs_Set_Fan_Fail2_LED(mode); + break; + case LED_ID_FAN_FAIL_3: + Sysfs_Set_Fan_Fail3_LED(mode); + break; + case LED_ID_FAN_FAIL_4: + Sysfs_Set_Fan_Fail4_LED(mode); + break; + default: + return ONLP_STATUS_E_INTERNAL; + break; + } + + return ONLP_STATUS_OK; +} diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/make.mk b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/make.mk new file mode 100755 index 00000000..df3c695d --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/make.mk @@ -0,0 +1,9 @@ +############################################################################### +# +# +# +############################################################################### + +LIBRARY := x86_64_quanta_ix2_rangeley +$(LIBRARY)_SUBDIR := $(dir $(lastword $(MAKEFILE_LIST))) +include $(BUILDER)/lib.mk diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/psui.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/psui.c new file mode 100755 index 00000000..eab99789 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/psui.c @@ -0,0 +1,118 @@ +/************************************************************ + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include +#include +#include +#include "x86_64_quanta_ix2_rangeley_int.h" +#include "x86_64_quanta_ix2_rangeley_log.h" + +struct psu_info_s psu_info[] = { + {}, /* Not used */ + { .path = "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-20/20-005f", .present = QUANTA_IX2_PSU_GPIO_PSU1_PRSNT_N, .busno = 20, .addr = 0x5f}, + { .path = "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-21/21-0059", .present = QUANTA_IX2_PSU_GPIO_PSU2_PRSNT_N, .busno = 21, .addr = 0x59}, +}; + +int +onlp_psui_init(void) +{ + return 0; +} + +static onlp_psu_info_t psus__[] = { + { }, /* Not used */ + { + { + PSU_OID_PSU1, + "Quanta IX2 RPSU-1", + 0, + { + FAN_OID_FAN9, + }, + } + }, + { + { + PSU_OID_PSU2, + "Quanta IX2 RPSU-2", + 0, + { + FAN_OID_FAN10, + }, + } + }, +}; + +#define PMBUS_MFR_MODEL 0x9A +#define PMBUS_MFR_SERIAL 0x9E +#define PMBUS_MFR_MODEL_LEN 20 +#define PMBUS_MFR_SERIAL_LEN 19 + +int +onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) +{ + int rv; + int pid = ONLP_OID_ID_GET(id); + *info = psus__[pid]; + const char* dir = psu_info[pid].path; + unsigned char buffer[ONLP_CONFIG_INFO_STR_MAX]; + int value = -1, len; + + rv = onlp_gpio_get(psu_info[pid].present, &value); + if(rv < 0) { + return rv; + } + else if(value == 1) { + info->status &= ~1; + return 0; + } + + if(onlp_file_read_int(&info->mvin, "%s*in1_input", dir) == 0 && info->mvin >= 0) { + info->caps |= ONLP_PSU_CAPS_VIN; + } + + /* PSU is present and powered. */ + info->status |= 1; + + len = PMBUS_MFR_MODEL_LEN; + if(onlp_file_read(buffer, sizeof(buffer), &len, "%s*mfr_model", dir) != 0){ + AIM_LOG_ERROR("Read PMBUS_MFR_MODEL ###ERROR###");; + } + aim_strlcpy(info->model, (char *) buffer, 16); + + len = PMBUS_MFR_SERIAL_LEN; + if(onlp_file_read(buffer, sizeof(buffer), &len, "%s*mfr_serial", dir) != 0){ + AIM_LOG_ERROR("Read PMBUS_MFR_SERIAL ###ERROR###");; + } + aim_strlcpy(info->serial, (char *) buffer, 14);; + + info->caps |= ONLP_PSU_CAPS_AC; + + if(onlp_file_read_int(&info->miin, "%s*curr1_input", dir) == 0 && info->miin >= 0) { + info->caps |= ONLP_PSU_CAPS_IIN; + } + if(onlp_file_read_int(&info->miout, "%s*curr2_input", dir) == 0 && info->miout >= 0) { + info->caps |= ONLP_PSU_CAPS_IOUT; + } + if(onlp_file_read_int(&info->mvout, "%s*in2_input", dir) == 0 && info->mvout >= 0) { + info->caps |= ONLP_PSU_CAPS_VOUT; + } + if(onlp_file_read_int(&info->mpin, "%s*power1_input", dir) == 0 && info->mpin >= 0) { + info->caps |= ONLP_PSU_CAPS_PIN; + /* The pmbus driver reports power in micro-units */ + info->mpin /= 1000; + } + if(onlp_file_read_int(&info->mpout, "%s*power2_input", dir) == 0 && info->mpout >= 0) { + info->caps |= ONLP_PSU_CAPS_POUT; + /* the pmbus driver reports power in micro-units */ + info->mpout /= 1000; + } + return ONLP_STATUS_OK; +} diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c new file mode 100755 index 00000000..05243a0f --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c @@ -0,0 +1,222 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * SFPI Interface for the Quanta IX2 + * + ***********************************************************/ +#include +#include +#include +#include +#include +#include "x86_64_quanta_ix2_rangeley_log.h" + +#include +#include + +/** + * This table maps the presence gpio, reset gpio, and eeprom file + * for each SFP port. + */ +typedef struct sfpmap_s { + int port; + const char* present_cpld; + const char* reset_gpio; + const char* eeprom; + const char* dom; +} sfpmap_t; + +static sfpmap_t sfpmap__[] = + { + { 1, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-1/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-32/32-0050/eeprom", NULL }, + { 2, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-2/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-33/33-0050/eeprom", NULL }, + { 3, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-3/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-34/34-0050/eeprom", NULL }, + { 4, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-4/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-35/35-0050/eeprom", NULL }, + { 5, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-5/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-36/36-0050/eeprom", NULL }, + { 6, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-6/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-37/37-0050/eeprom", NULL }, + { 7, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-7/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-38/38-0050/eeprom", NULL }, + { 8, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-8/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-39/39-0050/eeprom", NULL }, + { 9, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-9/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-40/40-0050/eeprom", NULL }, + { 10, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-10/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-41/41-0050/eeprom", NULL }, + { 11, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-11/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-42/42-0050/eeprom", NULL }, + { 12, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-12/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-43/43-0050/eeprom", NULL }, + { 13, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-13/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-44/44-0050/eeprom", NULL }, + { 14, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-14/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-45/45-0050/eeprom", NULL }, + { 15, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-15/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-46/46-0050/eeprom", NULL }, + { 16, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-16/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-47/47-0050/eeprom", NULL }, + { 17, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-17/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-48/48-0050/eeprom", NULL }, + { 18, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-18/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-49/49-0050/eeprom", NULL }, + { 19, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-19/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-50/50-0050/eeprom", NULL }, + { 20, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-20/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-51/51-0050/eeprom", NULL }, + { 21, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-21/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-52/52-0050/eeprom", NULL }, + { 22, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-22/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-53/53-0050/eeprom", NULL }, + { 23, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-23/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-54/54-0050/eeprom", NULL }, + { 24, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-24/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-55/55-0050/eeprom", NULL }, + { 25, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-25/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-56/56-0050/eeprom", NULL }, + { 26, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-26/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-57/57-0050/eeprom", NULL }, + { 27, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-27/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-58/58-0050/eeprom", NULL }, + { 28, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-28/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-59/59-0050/eeprom", NULL }, + { 29, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-29/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-60/60-0050/eeprom", NULL }, + { 30, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-30/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-61/61-0050/eeprom", NULL }, + { 31, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-31/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-62/62-0050/eeprom", NULL }, + { 32, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-32/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-63/63-0050/eeprom", NULL }, + { 33, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-33/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-64/64-0050/eeprom", NULL }, + { 34, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-34/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-65/65-0050/eeprom", NULL }, + { 35, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-35/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-66/66-0050/eeprom", NULL }, + { 36, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-36/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-67/67-0050/eeprom", NULL }, + { 37, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-37/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-68/68-0050/eeprom", NULL }, + { 38, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-38/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-69/69-0050/eeprom", NULL }, + { 39, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-39/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-70/70-0050/eeprom", NULL }, + { 40, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-40/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-71/71-0050/eeprom", NULL }, + { 41, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-41/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-72/72-0050/eeprom", NULL }, + { 42, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-42/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-73/73-0050/eeprom", NULL }, + { 43, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-43/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-74/74-0050/eeprom", NULL }, + { 44, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-44/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-75/75-0050/eeprom", NULL }, + { 45, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-45/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-76/76-0050/eeprom", NULL }, + { 46, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-46/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-77/77-0050/eeprom", NULL }, + { 47, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-47/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-78/78-0050/eeprom", NULL }, + { 48, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-48/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-79/79-0050/eeprom", NULL }, + }; + +typedef struct qsfpmap_s { + int port; + int present_gpio; + const char* reset_gpio; + const char* eeprom; + const char* dom; +} qsfpmap_t; + +static qsfpmap_t qsfpmap__[] = + { + { 49, QUANTA_IX2_PCA9698_1_GPIO_QSFP_1_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-80/80-0050/eeprom", NULL }, + { 50, QUANTA_IX2_PCA9698_1_GPIO_QSFP_2_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-81/81-0050/eeprom", NULL }, + { 51, QUANTA_IX2_PCA9698_1_GPIO_QSFP_3_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-82/82-0050/eeprom", NULL }, + { 52, QUANTA_IX2_PCA9698_1_GPIO_QSFP_4_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-83/83-0050/eeprom", NULL }, + { 53, QUANTA_IX2_PCA9698_1_GPIO_QSFP_5_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-84/84-0050/eeprom", NULL }, + { 54, QUANTA_IX2_PCA9698_1_GPIO_QSFP_6_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-85/85-0050/eeprom", NULL }, + { 55, QUANTA_IX2_PCA9698_1_GPIO_QSFP_7_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-86/86-0050/eeprom", NULL }, + { 56, QUANTA_IX2_PCA9698_1_GPIO_QSFP_8_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-87/87-0050/eeprom", NULL }, + }; + +#define SFP_GET(_port) (sfpmap__ + _port - 1) +#define QSFP_GET(_port) (qsfpmap__ + _port - 49) + +int +onlp_sfpi_init(void) +{ + int ret, i; + qsfpmap_t* qsfp; + + onlp_gpio_export(QUANTA_IX2_ZQSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_OUT); + ret = onlp_gpio_set(QUANTA_IX2_ZQSFP_EN_GPIO_P3V3_PW_EN, 1); + sleep(1); + + for(i = 49; i < 57 ; i ++) { + qsfp = QSFP_GET(i); + onlp_gpio_export(qsfp->present_gpio, ONLP_GPIO_DIRECTION_IN); + } + + return ret; +} + +int +onlp_sfpi_bitmap_get(onlp_sfp_bitmap_t* bmap) +{ + int p; + + for(p = 1; p < 57; p++) { + AIM_BITMAP_SET(bmap, p); + } + + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_is_present(int port) +{ + if(port > 48){ + int value = 0; + qsfpmap_t* qsfp = QSFP_GET(port); + + if(qsfp->present_gpio > 0) { + if(onlp_gpio_get(qsfp->present_gpio, &value) == ONLP_STATUS_OK) + return (value == 0); + else + return ONLP_STATUS_E_MISSING; + } + else { + /** + * If we can open and read a byte from the EEPROM file + * then we consider it present. + */ + int fd = open(qsfp->eeprom, O_RDONLY); + if (fd < 0) { + /* Not Present */ + return 0; + } + int rv; + uint8_t byte; + + if(read(fd, &byte, 1) == 1) { + /* Present */ + rv = 1; + } + else { + /* No Present */ + rv = 0; + } + close(fd); + return rv; + } + } + else{ + sfpmap_t* sfp = SFP_GET(port); + + return onlplib_sfp_is_present_file(sfp->present_cpld, /* Present */ "1\n", /* Absent */ "0\n"); + } +} + +int +onlp_sfpi_eeprom_read(int port, uint8_t data[256]) +{ + if(port > 48){ + qsfpmap_t* qsfp = QSFP_GET(port); + return onlplib_sfp_eeprom_read_file(qsfp->eeprom, data); + } + else{ + sfpmap_t* sfp = SFP_GET(port); + return onlplib_sfp_eeprom_read_file(sfp->eeprom, data); + } +} + +int +onlp_sfpi_dom_read(int port, uint8_t data[256]) +{ + if(port > 48){ + qsfpmap_t* qsfp = QSFP_GET(port); + return onlplib_sfp_eeprom_read_file(qsfp->dom, data); + } + else{ + sfpmap_t* sfp = SFP_GET(port); + return onlplib_sfp_eeprom_read_file(sfp->dom, data); + } +} + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sysi.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sysi.c new file mode 100755 index 00000000..3455aad3 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sysi.c @@ -0,0 +1,288 @@ +/************************************************************ + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include "x86_64_quanta_ix2_rangeley_int.h" +#include "x86_64_quanta_ix2_rangeley_log.h" +#include +#include +#include +#include +#include + +struct led_control_s led_control; + +#define QUANTA_HWMON_REG_TEMP_ALERT_MASK 0x1E +#define QUANTA_HWMON_REG_TEMP_ALERT_CTRL 0x1D +#define QUANTA_HWMON_REG_FAN_ALERT_MASK 0x31 +#define QUANTA_HWMON_REG_FAN_ALERT_CTRL 0x30 +#define PSOC_REG_FAN_ALERT_STATUS 0x32 + +#define QUANTA_FAN_1_1 0x01 +#define QUANTA_FAN_1_2 0x10 +#define QUANTA_FAN_2_1 0x02 +#define QUANTA_FAN_2_2 0x20 +#define QUANTA_FAN_3_1 0x04 +#define QUANTA_FAN_3_2 0x40 +#define QUANTA_FAN_4_1 0x08 +#define QUANTA_FAN_4_2 0x80 + +const char* +onlp_sysi_platform_get(void) +{ + return "x86-64-quanta-ix2-rangeley-r0"; +} + +int +onlp_sysi_init(void) +{ + /* Initial value */ + led_control.PMCnt = 0; + led_control.fan_alert = 0xff; + led_control.psu1_present = 0; + led_control.psu2_present = 0; + led_control.psu1_power_good = 0; + led_control.psu2_power_good = 0; + + /* Set PSoc Fan-Alert Enable */ + onlp_i2c_writeb(0, 0x4e, QUANTA_HWMON_REG_TEMP_ALERT_MASK, 0x77, ONLP_I2C_F_FORCE); + onlp_i2c_writeb(0, 0x4e, QUANTA_HWMON_REG_TEMP_ALERT_CTRL, 0x3, ONLP_I2C_F_FORCE); + onlp_i2c_writeb(0, 0x4e, QUANTA_HWMON_REG_FAN_ALERT_MASK, 0xff, ONLP_I2C_F_FORCE); + onlp_i2c_writeb(0, 0x4e, QUANTA_HWMON_REG_FAN_ALERT_CTRL, 0x1, ONLP_I2C_F_FORCE); + + /* Config GPIO */ + /* LED Output */ + onlp_gpio_export(QUANTA_IX2_CPU_BOARD_SYS_P1, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_CPU_BOARD_SYS_P2, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU1_GREEN_R, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU1_RED_R, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU2_GREEN_R, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU2_RED_R, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_FAN_FAIL_LED_1, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_FAN_FAIL_LED_2, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_FAN_FAIL_LED_3, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_FAN_FAIL_LED_4, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_FAN_GREEN_R, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_FAN_RED_R, ONLP_GPIO_DIRECTION_OUT); + /* PSU Input */ + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU1_PRSNT_N, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU1_PWRGD, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU2_PRSNT_N, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(QUANTA_IX2_PSU_GPIO_PSU2_PWRGD, ONLP_GPIO_DIRECTION_IN); + /* FAN Input */ + onlp_gpio_export(QUANTA_IX2_FAN_PRSNT_N_1, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(QUANTA_IX2_FAN_PRSNT_N_2, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(QUANTA_IX2_FAN_PRSNT_N_3, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(QUANTA_IX2_FAN_PRSNT_N_4, ONLP_GPIO_DIRECTION_IN); + + /* Set LED to green */ + onlp_ledi_mode_set(LED_OID_SYSTEM, ONLP_LED_MODE_GREEN); + led_control.psu_status_changed = 1; + led_control.fan_status_changed = 1; + onlp_sysi_platform_manage_leds(); + + return ONLP_STATUS_OK; +} + +#define QUANTA_SYS_EEPROM_PATH \ +"/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-22/22-0054/eeprom" + +int +onlp_sysi_onie_info_get(onlp_onie_info_t* onie) +{ + int rv; + + rv = onlp_onie_decode_file(onie, QUANTA_SYS_EEPROM_PATH); + if(rv >= 0) { + onie->platform_name = aim_strdup("x86-64-quanta-ix2-rangeley-r0"); + rv = quanta_onie_sys_eeprom_custom_format(onie); + } + return rv; +} + +int +onlp_sysi_oids_get(onlp_oid_t* table, int max) +{ + onlp_oid_t* e = table; + memset(table, 0, max*sizeof(onlp_oid_t)); + + /* + * 6 Chassis Thermal Sensors + */ + *e++ = THERMAL_OID_THERMAL1; + *e++ = THERMAL_OID_THERMAL2; + *e++ = THERMAL_OID_THERMAL3; + *e++ = THERMAL_OID_THERMAL5; + *e++ = THERMAL_OID_THERMAL6; + *e++ = THERMAL_OID_THERMAL7; + + /* + * 8 Fans + */ + *e++ = FAN_OID_FAN1; + *e++ = FAN_OID_FAN2; + *e++ = FAN_OID_FAN3; + *e++ = FAN_OID_FAN4; + *e++ = FAN_OID_FAN5; + *e++ = FAN_OID_FAN6; + *e++ = FAN_OID_FAN7; + *e++ = FAN_OID_FAN8; + + /* + * 2 PSUs + */ + *e++ = PSU_OID_PSU1; + *e++ = PSU_OID_PSU2; + + /* + * 8 LEDs + */ + *e++ = LED_OID_SYSTEM; + *e++ = LED_OID_FAN; + *e++ = LED_OID_PSU_1; + *e++ = LED_OID_PSU_2; + *e++ = LED_OID_FAN_FAIL_1; + *e++ = LED_OID_FAN_FAIL_2; + *e++ = LED_OID_FAN_FAIL_3; + *e++ = LED_OID_FAN_FAIL_4; + + return 0; +} + +int +update_rpsu_fan_status(void){ + int last_status, rv, value = -1, tmp; + + last_status = led_control.psu1_present; + rv = onlp_gpio_get(QUANTA_IX2_PSU_GPIO_PSU1_PRSNT_N, &value); + if(rv < 0) { + AIM_LOG_ERROR("GPIO %d read Error!", QUANTA_IX2_PSU_GPIO_PSU1_PRSNT_N); + return rv; + } + led_control.psu1_present = (value ? 0 : 1); + if(last_status != led_control.psu1_present) + led_control.psu_status_changed = 1; + + last_status = led_control.psu1_power_good; + rv = onlp_gpio_get(QUANTA_IX2_PSU_GPIO_PSU1_PWRGD, &value); + if(rv < 0) { + AIM_LOG_ERROR("GPIO %d read Error!", QUANTA_IX2_PSU_GPIO_PSU1_PWRGD); + return rv; + } + led_control.psu1_power_good = (value ? 1 : 0); + if(last_status != led_control.psu1_power_good) + led_control.psu_status_changed = 1; + + last_status = led_control.psu2_present; + rv = onlp_gpio_get(QUANTA_IX2_PSU_GPIO_PSU2_PRSNT_N, &value); + if(rv < 0) { + AIM_LOG_ERROR("GPIO %d read Error!", QUANTA_IX2_PSU_GPIO_PSU2_PRSNT_N); + return rv; + } + led_control.psu2_present = (value ? 0 : 1); + if(last_status != led_control.psu2_present) + led_control.psu_status_changed = 1; + + last_status = led_control.psu2_power_good; + rv = onlp_gpio_get(QUANTA_IX2_PSU_GPIO_PSU2_PWRGD, &value); + if(rv < 0) { + AIM_LOG_ERROR("GPIO %d read Error!", QUANTA_IX2_PSU_GPIO_PSU2_PWRGD); + return rv; + } + led_control.psu2_power_good = (value ? 1 : 0); + if(last_status != led_control.psu2_power_good) + led_control.psu_status_changed = 1; + + tmp = led_control.fan_alert; + led_control.fan_alert = onlp_i2c_readb(0, 0x4e, PSOC_REG_FAN_ALERT_STATUS, ONLP_I2C_F_FORCE); + if(tmp != led_control.fan_alert) + led_control.fan_status_changed = 1; + + return ONLP_STATUS_OK; +} + +int +onlp_sysi_platform_manage_leds(void) +{ + int rv; + + led_control.PMCnt++; + if(led_control.PMCnt>300) + led_control.PMCnt = 0; + if(led_control.PMCnt % 5 == 1){/* Each 10 seconds detect one time */ + + rv = update_rpsu_fan_status(); + if(rv < 0){ + printf("onlp_sysi_platform_manage_leds error\n"); + return ONLP_STATUS_E_INVALID; + } + + if(led_control.psu_status_changed){ + if(led_control.psu1_present && led_control.psu1_power_good) { + onlp_ledi_mode_set(LED_ID_PSU_1, ONLP_LED_MODE_GREEN); + } + else if(!led_control.psu1_present){ + onlp_ledi_mode_set(LED_ID_PSU_1, ONLP_LED_MODE_OFF); + } + else{ + onlp_ledi_mode_set(LED_ID_PSU_1, ONLP_LED_MODE_RED); + } + + if(led_control.psu2_present && led_control.psu2_power_good) { + onlp_ledi_mode_set(LED_ID_PSU_2, ONLP_LED_MODE_GREEN); + } + else if(!led_control.psu2_present){ + onlp_ledi_mode_set(LED_ID_PSU_2, ONLP_LED_MODE_OFF); + } + else{ + onlp_ledi_mode_set(LED_ID_PSU_2, ONLP_LED_MODE_RED); + } + led_control.psu_status_changed = 0; + } + + if(led_control.fan_status_changed){ + if(!(led_control.fan_alert & QUANTA_FAN_1_1) && !(led_control.fan_alert & QUANTA_FAN_1_2)) { + onlp_ledi_mode_set(LED_ID_FAN_FAIL_1, ONLP_LED_MODE_OFF); + } + else{ + onlp_ledi_mode_set(LED_ID_FAN_FAIL_1, ONLP_LED_MODE_RED); + } + + if(!(led_control.fan_alert & QUANTA_FAN_2_1) && !(led_control.fan_alert & QUANTA_FAN_2_2)) { + onlp_ledi_mode_set(LED_ID_FAN_FAIL_2, ONLP_LED_MODE_OFF); + } + else{ + onlp_ledi_mode_set(LED_ID_FAN_FAIL_2, ONLP_LED_MODE_RED); + } + + if(!(led_control.fan_alert & QUANTA_FAN_3_1) && !(led_control.fan_alert & QUANTA_FAN_3_2)) { + onlp_ledi_mode_set(LED_ID_FAN_FAIL_3, ONLP_LED_MODE_OFF); + } + else{ + onlp_ledi_mode_set(LED_ID_FAN_FAIL_3, ONLP_LED_MODE_RED); + } + + if(!(led_control.fan_alert & QUANTA_FAN_4_1) && !(led_control.fan_alert & QUANTA_FAN_4_2)) { + onlp_ledi_mode_set(LED_ID_FAN_FAIL_4, ONLP_LED_MODE_OFF); + } + else{ + onlp_ledi_mode_set(LED_ID_FAN_FAIL_4, ONLP_LED_MODE_RED); + } + + if(!led_control.fan_alert){ + onlp_ledi_mode_set(LED_ID_FAN, ONLP_LED_MODE_GREEN); + } + else{ + onlp_ledi_mode_set(LED_ID_FAN, ONLP_LED_MODE_RED); + } + led_control.fan_status_changed = 0; + } + } + + return ONLP_STATUS_OK; +} diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/thermali.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/thermali.c new file mode 100755 index 00000000..f130b960 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/thermali.c @@ -0,0 +1,146 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include "x86_64_quanta_ix2_rangeley_int.h" +#include "x86_64_quanta_ix2_rangeley_log.h" + +int +onlp_thermali_init(void) +{ + return ONLP_STATUS_OK; +} + +static int +sys_thermal_info_get__(onlp_thermal_info_t* info, int id) +{ + int rv; + + rv = onlp_file_read_int(&info->mcelsius, + SYS_HWMON_PREFIX "/temp%d_input", id); + + if(rv == ONLP_STATUS_E_INTERNAL) { + return rv; + } + + if(rv == ONLP_STATUS_E_MISSING) { + info->status &= ~1; + return 0; + } + + return ONLP_STATUS_OK; +} + +static int +psu_thermal_info_get__(onlp_thermal_info_t* info, int pid, int id) +{ + /* THERMAL6 -> PSU1 */ + /* THERMAL7 -> PSU2 */ + extern struct psu_info_s psu_info[]; + char* dir = psu_info[pid].path; + + info->status |= 1; + return onlp_file_read_int(&info->mcelsius, "%s/temp%d_input", dir, id); +} + +int +onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* rv) +{ + int tid = ONLP_OID_ID_GET(id); + + static onlp_thermal_info_t info[] = { + { }, /* Not used */ + { { ONLP_THERMAL_ID_CREATE(1), "Chassis Thermal 1", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(2), "Chassis Thermal 2", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(3), "Chassis Thermal 3", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(4), "Chassis Thermal 4", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(5), "Chassis Thermal 5", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(6), "Chassis Thermal 6", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(7), "Chassis Thermal 7", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(8), "Chassis Thermal 8", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(9), "Chassis Thermal 9", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(10), "Chassis Thermal 10", 0}, ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + + { { ONLP_THERMAL_ID_CREATE(11), "PSU-1 Thermal 1", 0 } }, + { { ONLP_THERMAL_ID_CREATE(12), "PSU-1 Thermal 2", 0 } }, + { { ONLP_THERMAL_ID_CREATE(13), "PSU-1 Thermal 3", 0 } }, + + { { ONLP_THERMAL_ID_CREATE(14), "PSU-2 Thermal 1", 0 } }, + { { ONLP_THERMAL_ID_CREATE(15), "PSU-2 Thermal 2", 0 } }, + { { ONLP_THERMAL_ID_CREATE(16), "PSU-2 Thermal 3", 0 } }, + }; + + *rv = info[tid]; + rv->caps |= ONLP_THERMAL_CAPS_GET_TEMPERATURE; + + switch(tid) + { + case THERMAL_ID_THERMAL1: + case THERMAL_ID_THERMAL2: + case THERMAL_ID_THERMAL3: + case THERMAL_ID_THERMAL4: + case THERMAL_ID_THERMAL5: + case THERMAL_ID_THERMAL6: + case THERMAL_ID_THERMAL7: + case THERMAL_ID_THERMAL8: + case THERMAL_ID_THERMAL9: + case THERMAL_ID_THERMAL10: + return sys_thermal_info_get__(rv, tid); + + case THERMAL_ID_THERMAL11: + case THERMAL_ID_THERMAL12: + case THERMAL_ID_THERMAL13: + return psu_thermal_info_get__(rv, 1, tid - THERMAL_ID_THERMAL11 + 1); + + + case THERMAL_ID_THERMAL14: + case THERMAL_ID_THERMAL15: + case THERMAL_ID_THERMAL16: + return psu_thermal_info_get__(rv, 2, tid - THERMAL_ID_THERMAL14 + 1); + + } + + return ONLP_STATUS_E_INVALID; +} diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_config.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_config.c new file mode 100755 index 00000000..c414758b --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_config.c @@ -0,0 +1,95 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +/* */ +#define __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(_x) #_x +#define __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(_x) __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(_x) +x86_64_quanta_ix2_rangeley_config_settings_t x86_64_quanta_ix2_rangeley_config_settings[] = +{ +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_LOGGING(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_STDLIB(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_RPM_FAILURE_THRESHOLD(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_F2B_RPM_MAX(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_SYSFAN_B2F_RPM_MAX(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS + { __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME(X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS), __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE(X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS) }, +#else +{ X86_64_QUANTA_IX2_RANGELEY_CONFIG_PHY_RESET_DELAY_MS(__x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME), "__undefined__" }, +#endif + { NULL, NULL } +}; +#undef __x86_64_quanta_ix2_rangeley_config_STRINGIFY_VALUE +#undef __x86_64_quanta_ix2_rangeley_config_STRINGIFY_NAME + +const char* +x86_64_quanta_ix2_rangeley_config_lookup(const char* setting) +{ + int i; + for(i = 0; x86_64_quanta_ix2_rangeley_config_settings[i].name; i++) { + if(strcmp(x86_64_quanta_ix2_rangeley_config_settings[i].name, setting)) { + return x86_64_quanta_ix2_rangeley_config_settings[i].value; + } + } + return NULL; +} + +int +x86_64_quanta_ix2_rangeley_config_show(struct aim_pvs_s* pvs) +{ + int i; + for(i = 0; x86_64_quanta_ix2_rangeley_config_settings[i].name; i++) { + aim_printf(pvs, "%s = %s\n", x86_64_quanta_ix2_rangeley_config_settings[i].name, x86_64_quanta_ix2_rangeley_config_settings[i].value); + } + return i; +} + +/* */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_enums.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_enums.c new file mode 100755 index 00000000..33e7fdfd --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_enums.c @@ -0,0 +1,10 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +/* <--auto.start.enum(ALL).source> */ +/* */ + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_int.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_int.h new file mode 100755 index 00000000..27757bb2 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_int.h @@ -0,0 +1,308 @@ +/**************************************************************************//** + * + * x86_64_quanta_ix2_rangeley Internal Header + * + *****************************************************************************/ +#ifndef __X86_64_QUANTA_IX2_RANGELEY_INT_H__ +#define __X86_64_QUANTA_IX2_RANGELEY_INT_H__ + +#include +#include + +/* */ +/** thermal_oid */ +typedef enum thermal_oid_e { + THERMAL_OID_THERMAL1 = ONLP_THERMAL_ID_CREATE(1), + THERMAL_OID_THERMAL2 = ONLP_THERMAL_ID_CREATE(2), + THERMAL_OID_THERMAL3 = ONLP_THERMAL_ID_CREATE(3), + THERMAL_OID_THERMAL4 = ONLP_THERMAL_ID_CREATE(4), + THERMAL_OID_THERMAL5 = ONLP_THERMAL_ID_CREATE(5), + THERMAL_OID_THERMAL6 = ONLP_THERMAL_ID_CREATE(6), + THERMAL_OID_THERMAL7 = ONLP_THERMAL_ID_CREATE(7), + THERMAL_OID_THERMAL8 = ONLP_THERMAL_ID_CREATE(8), + THERMAL_OID_THERMAL9 = ONLP_THERMAL_ID_CREATE(9), + THERMAL_OID_THERMAL10 = ONLP_THERMAL_ID_CREATE(10), + THERMAL_OID_THERMAL11 = ONLP_THERMAL_ID_CREATE(11), + THERMAL_OID_THERMAL12 = ONLP_THERMAL_ID_CREATE(12), + THERMAL_OID_THERMAL13 = ONLP_THERMAL_ID_CREATE(13), + THERMAL_OID_THERMAL14 = ONLP_THERMAL_ID_CREATE(14), + THERMAL_OID_THERMAL15 = ONLP_THERMAL_ID_CREATE(15), + THERMAL_OID_THERMAL16 = ONLP_THERMAL_ID_CREATE(16), +} thermal_oid_t; + +/** Enum names. */ +const char* thermal_oid_name(thermal_oid_t e); + +/** Enum values. */ +int thermal_oid_value(const char* str, thermal_oid_t* e, int substr); + +/** Enum descriptions. */ +const char* thermal_oid_desc(thermal_oid_t e); + +/** Enum validator. */ +int thermal_oid_valid(thermal_oid_t e); + +/** validator */ +#define THERMAL_OID_VALID(_e) \ + (thermal_oid_valid((_e))) + +/** thermal_oid_map table. */ +extern aim_map_si_t thermal_oid_map[]; +/** thermal_oid_desc_map table. */ +extern aim_map_si_t thermal_oid_desc_map[]; + +/** psu_oid */ +typedef enum psu_oid_e { + PSU_OID_PSU1 = ONLP_PSU_ID_CREATE(1), + PSU_OID_PSU2 = ONLP_PSU_ID_CREATE(2), +} psu_oid_t; + +/** Enum names. */ +const char* psu_oid_name(psu_oid_t e); + +/** Enum values. */ +int psu_oid_value(const char* str, psu_oid_t* e, int substr); + +/** Enum descriptions. */ +const char* psu_oid_desc(psu_oid_t e); + +/** Enum validator. */ +int psu_oid_valid(psu_oid_t e); + +/** validator */ +#define PSU_OID_VALID(_e) \ + (psu_oid_valid((_e))) + +/** psu_oid_map table. */ +extern aim_map_si_t psu_oid_map[]; +/** psu_oid_desc_map table. */ +extern aim_map_si_t psu_oid_desc_map[]; + +/** thermal_id */ +typedef enum thermal_id_e { + THERMAL_ID_THERMAL1 = 1, + THERMAL_ID_THERMAL2 = 2, + THERMAL_ID_THERMAL3 = 3, + THERMAL_ID_THERMAL4 = 4, + THERMAL_ID_THERMAL5 = 5, + THERMAL_ID_THERMAL6 = 6, + THERMAL_ID_THERMAL7 = 7, + THERMAL_ID_THERMAL8 = 8, + THERMAL_ID_THERMAL9 = 9, + THERMAL_ID_THERMAL10 = 10, + THERMAL_ID_THERMAL11 = 11, + THERMAL_ID_THERMAL12 = 12, + THERMAL_ID_THERMAL13 = 13, + THERMAL_ID_THERMAL14 = 14, + THERMAL_ID_THERMAL15 = 15, + THERMAL_ID_THERMAL16 = 16, +} thermal_id_t; + +/** Enum names. */ +const char* thermal_id_name(thermal_id_t e); + +/** Enum values. */ +int thermal_id_value(const char* str, thermal_id_t* e, int substr); + +/** Enum descriptions. */ +const char* thermal_id_desc(thermal_id_t e); + +/** Enum validator. */ +int thermal_id_valid(thermal_id_t e); + +/** validator */ +#define THERMAL_ID_VALID(_e) \ + (thermal_id_valid((_e))) + +/** thermal_id_map table. */ +extern aim_map_si_t thermal_id_map[]; +/** thermal_id_desc_map table. */ +extern aim_map_si_t thermal_id_desc_map[]; + +/** fan_id */ +typedef enum fan_id_e { + FAN_ID_FAN1 = 1, + FAN_ID_FAN2 = 2, + FAN_ID_FAN3 = 3, + FAN_ID_FAN4 = 4, + FAN_ID_FAN5 = 5, + FAN_ID_FAN6 = 6, + FAN_ID_FAN7 = 7, + FAN_ID_FAN8 = 8, + FAN_ID_FAN9 = 9, + FAN_ID_FAN10 = 10, +} fan_id_t; + +/** Enum names. */ +const char* fan_id_name(fan_id_t e); + +/** Enum values. */ +int fan_id_value(const char* str, fan_id_t* e, int substr); + +/** Enum descriptions. */ +const char* fan_id_desc(fan_id_t e); + +/** Enum validator. */ +int fan_id_valid(fan_id_t e); + +/** validator */ +#define FAN_ID_VALID(_e) \ + (fan_id_valid((_e))) + +/** fan_id_map table. */ +extern aim_map_si_t fan_id_map[]; +/** fan_id_desc_map table. */ +extern aim_map_si_t fan_id_desc_map[]; + +/** psu_id */ +typedef enum psu_id_e { + PSU_ID_PSU1 = 1, + PSU_ID_PSU2 = 2, +} psu_id_t; + +/** Enum names. */ +const char* psu_id_name(psu_id_t e); + +/** Enum values. */ +int psu_id_value(const char* str, psu_id_t* e, int substr); + +/** Enum descriptions. */ +const char* psu_id_desc(psu_id_t e); + +/** Enum validator. */ +int psu_id_valid(psu_id_t e); + +/** validator */ +#define PSU_ID_VALID(_e) \ + (psu_id_valid((_e))) + +/** psu_id_map table. */ +extern aim_map_si_t psu_id_map[]; +/** psu_id_desc_map table. */ +extern aim_map_si_t psu_id_desc_map[]; + +/** fan_oid */ +typedef enum fan_oid_e { + FAN_OID_FAN1 = ONLP_FAN_ID_CREATE(1), + FAN_OID_FAN2 = ONLP_FAN_ID_CREATE(2), + FAN_OID_FAN3 = ONLP_FAN_ID_CREATE(3), + FAN_OID_FAN4 = ONLP_FAN_ID_CREATE(4), + FAN_OID_FAN5 = ONLP_FAN_ID_CREATE(5), + FAN_OID_FAN6 = ONLP_FAN_ID_CREATE(6), + FAN_OID_FAN7 = ONLP_FAN_ID_CREATE(7), + FAN_OID_FAN8 = ONLP_FAN_ID_CREATE(8), + FAN_OID_FAN9 = ONLP_FAN_ID_CREATE(9), + FAN_OID_FAN10 = ONLP_FAN_ID_CREATE(10), +} fan_oid_t; + +/** Enum names. */ +const char* fan_oid_name(fan_oid_t e); + +/** Enum values. */ +int fan_oid_value(const char* str, fan_oid_t* e, int substr); + +/** Enum descriptions. */ +const char* fan_oid_desc(fan_oid_t e); + +/** Enum validator. */ +int fan_oid_valid(fan_oid_t e); + +/** validator */ +#define FAN_OID_VALID(_e) \ + (fan_oid_valid((_e))) + +/** fan_oid_map table. */ +extern aim_map_si_t fan_oid_map[]; +/** fan_oid_desc_map table. */ +extern aim_map_si_t fan_oid_desc_map[]; +/* */ + +/* psu info table */ +struct psu_info_s { + char path[PATH_MAX]; + int present; + int busno; + int addr; +}; + +/** led_id */ +typedef enum led_id_e { + LED_ID_SYSTEM = 1, + LED_ID_FAN = 2, + LED_ID_PSU_1 = 3, + LED_ID_PSU_2 = 4, + LED_ID_FAN_FAIL_1 = 5, + LED_ID_FAN_FAIL_2 = 6, + LED_ID_FAN_FAIL_3 = 7, + LED_ID_FAN_FAIL_4 = 8, +} led_id_t; + +/** Enum names. */ +const char* led_id_name(led_id_t e); + +/** Enum values. */ +int led_id_value(const char* str, led_id_t* e, int substr); + +/** Enum descriptions. */ +const char* led_id_desc(led_id_t e); + +/** Enum validator. */ +int led_id_valid(led_id_t e); + +/** validator */ +#define LED_ID_VALID(_e) \ + (led_id_valid((_e))) + +/** led_id_map table. */ +extern aim_map_si_t led_id_map[]; +/** led_id_desc_map table. */ +extern aim_map_si_t led_id_desc_map[]; + +/** led_oid */ +typedef enum led_oid_e { + LED_OID_SYSTEM = ONLP_LED_ID_CREATE(LED_ID_SYSTEM), + LED_OID_FAN = ONLP_LED_ID_CREATE(LED_ID_FAN), + LED_OID_PSU_1 = ONLP_LED_ID_CREATE(LED_ID_PSU_1), + LED_OID_PSU_2 = ONLP_LED_ID_CREATE(LED_ID_PSU_2), + LED_OID_FAN_FAIL_1 = ONLP_LED_ID_CREATE(LED_ID_FAN_FAIL_1), + LED_OID_FAN_FAIL_2 = ONLP_LED_ID_CREATE(LED_ID_FAN_FAIL_2), + LED_OID_FAN_FAIL_3 = ONLP_LED_ID_CREATE(LED_ID_FAN_FAIL_3), + LED_OID_FAN_FAIL_4 = ONLP_LED_ID_CREATE(LED_ID_FAN_FAIL_4), +} led_oid_t; + +/** Enum names. */ +const char* led_oid_name(led_oid_t e); + +/** Enum values. */ +int led_oid_value(const char* str, led_oid_t* e, int substr); + +/** Enum descriptions. */ +const char* led_oid_desc(led_oid_t e); + +/** Enum validator. */ +int led_oid_valid(led_oid_t e); + +/** validator */ +#define LED_OID_VALID(_e) \ + (led_oid_valid((_e))) + +/** led_oid_map table. */ +extern aim_map_si_t led_oid_map[]; +/** led_oid_desc_map table. */ +extern aim_map_si_t led_oid_desc_map[]; +/* */ + +struct led_control_s{ + int PMCnt; + int psu_status_changed; + int fan_status_changed; + int fan_alert; + int psu1_present; + int psu2_present; + int psu1_power_good; + int psu2_power_good; +}; + +#define SYS_HWMON_PREFIX "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/0-004e" + +#endif /* __X86_64_QUANTA_IX2_RANGELEY_INT_H__ */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.c new file mode 100755 index 00000000..5673120d --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.c @@ -0,0 +1,18 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +#include "x86_64_quanta_ix2_rangeley_log.h" +/* + * x86_64_quanta_ix2_rangeley log struct. + */ +AIM_LOG_STRUCT_DEFINE( + X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_OPTIONS_DEFAULT, + X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_BITS_DEFAULT, + NULL, /* Custom log map */ + X86_64_QUANTA_IX2_RANGELEY_CONFIG_LOG_CUSTOM_BITS_DEFAULT + ); + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.h new file mode 100755 index 00000000..e66008e6 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_log.h @@ -0,0 +1,12 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#ifndef __X86_64_QUANTA_IX2_RANGELEY_LOG_H__ +#define __X86_64_QUANTA_IX2_RANGELEY_LOG_H__ + +#define AIM_LOG_MODULE_NAME x86_64_quanta_ix2_rangeley +#include + +#endif /* __X86_64_QUANTA_IX2_RANGELEY_LOG_H__ */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_module.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_module.c new file mode 100755 index 00000000..3eac4372 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_module.c @@ -0,0 +1,24 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +#include "x86_64_quanta_ix2_rangeley_log.h" + +static int +datatypes_init__(void) +{ +#define X86_64_QUANTA_IX2_RANGELEY_ENUMERATION_ENTRY(_enum_name, _desc) AIM_DATATYPE_MAP_REGISTER(_enum_name, _enum_name##_map, _desc, AIM_LOG_INTERNAL); +#include + return 0; +} + +void __x86_64_quanta_ix2_rangeley_module_init__(void) +{ + AIM_LOG_STRUCT_REGISTER(); + datatypes_init__(); +} + +int __onlp_platform_version__ = 1; diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_ucli.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_ucli.c new file mode 100755 index 00000000..d13ec42d --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/x86_64_quanta_ix2_rangeley_ucli.c @@ -0,0 +1,50 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +#if X86_64_QUANTA_IX2_RANGELEY_CONFIG_INCLUDE_UCLI == 1 + +#include +#include +#include + +static ucli_status_t +x86_64_quanta_ix2_rangeley_ucli_ucli__config__(ucli_context_t* uc) +{ + UCLI_HANDLER_MACRO_MODULE_CONFIG(x86_64_quanta_ix2_rangeley) +} + +/* */ +/* */ + +static ucli_module_t +x86_64_quanta_ix2_rangeley_ucli_module__ = + { + "x86_64_quanta_ix2_rangeley_ucli", + NULL, + x86_64_quanta_ix2_rangeley_ucli_ucli_handlers__, + NULL, + NULL, + }; + +ucli_node_t* +x86_64_quanta_ix2_rangeley_ucli_node_create(void) +{ + ucli_node_t* n; + ucli_module_init(&x86_64_quanta_ix2_rangeley_ucli_module__); + n = ucli_node_create("x86_64_quanta_ix2_rangeley", NULL, &x86_64_quanta_ix2_rangeley_ucli_module__); + ucli_node_subnode_add(n, ucli_module_log_node_create("x86_64_quanta_ix2_rangeley")); + return n; +} + +#else +void* +x86_64_quanta_ix2_rangeley_ucli_node_create(void) +{ + return NULL; +} +#endif + diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/Makefile new file mode 100755 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/Makefile b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/Makefile new file mode 100755 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/PKG.yml b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/PKG.yml new file mode 100755 index 00000000..665b3f67 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/PKG.yml @@ -0,0 +1 @@ +!include $ONL_TEMPLATES/platform-config-platform.yml ARCH=amd64 VENDOR=quanta BASENAME=x86-64-quanta-ix2-rangeley REVISION=r0 diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/lib/x86-64-quanta-ix2-rangeley-r0.yml b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/lib/x86-64-quanta-ix2-rangeley-r0.yml new file mode 100755 index 00000000..725e03a8 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/lib/x86-64-quanta-ix2-rangeley-r0.yml @@ -0,0 +1,31 @@ +--- + +###################################################################### +# +# platform-config for IX2 +# +###################################################################### + +x86-64-quanta-ix2-rangeley-r0: + + grub: + + serial: >- + --port=0x2f8 + --speed=115200 + --word=8 + --parity=no + --stop=1 + + kernel: + <<: *kernel-3-16 + + args: >- + console=ttyS1,115200n8 + reboot=c,p + + ##network: + ## interfaces: + ## ma1: + ## name: ~ + ## syspath: pci0000:00/0000:00:14.0 diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py new file mode 100755 index 00000000..186013e1 --- /dev/null +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py @@ -0,0 +1,20 @@ +from onl.platform.base import * +from onl.platform.quanta import * + +class OnlPlatform_x86_64_quanta_ix2_rangeley_r0(OnlPlatformQuanta, + OnlPlatformPortConfig_48x25_8x100): + PLATFORM='x86-64-quanta-ix2-rangeley-r0' + MODEL="IX2" + SYS_OBJECT_ID=".8.1" + + def baseconfig(self): + # Expose PSOC that behind PCA9641 + os.system("i2cset -y 0 0x8 0x5 0xfb") + os.system("i2cset -y 0 0x8 0x1 0x5") + + self.insmod("qci_pmbus") + self.insmod("qci_cpld") + self.insmod("quanta_hwmon_ix_series") + self.insmod("quanta_platform_ix2") + + return True From e340181c30061558f1a8a318c570851a011306c7 Mon Sep 17 00:00:00 2001 From: roylee123 Date: Thu, 25 May 2017 11:05:44 +0800 Subject: [PATCH 02/31] Add new model, accton-as5916-54xm. --- .../x86-64-accton-as5916-54xm/.gitignore | 2 + .../x86-64/x86-64-accton-as5916-54xm/Makefile | 1 + .../modules/Makefile | 1 + .../x86-64-accton-as5916-54xm/modules/PKG.yml | 1 + .../modules/builds/.gitignore | 1 + .../modules/builds/Makefile | 6 + .../builds/x86-64-accton-as5916-54xm-fan.c | 485 ++++++ .../builds/x86-64-accton-as5916-54xm-leds.c | 378 +++++ .../builds/x86-64-accton-as5916-54xm-psu.c | 288 ++++ .../builds/x86-64-accton-as5916-54xm-sfp.c | 1315 +++++++++++++++++ .../x86-64-accton-as5916-54xm/onlp/Makefile | 1 + .../x86-64-accton-as5916-54xm/onlp/PKG.yml | 1 + .../onlp/builds/Makefile | 2 + .../onlp/builds/lib/Makefile | 45 + .../onlp/builds/onlpdump/Makefile | 46 + .../onlp/builds/src/.module | 1 + .../onlp/builds/src/Makefile | 9 + .../onlp/builds/src/README | 6 + .../onlp/builds/src/module/auto/make.mk | 9 + .../module/auto/x86_64_accton_as5916_54xm.yml | 50 + .../x86_64_accton_as5916_54xm.x | 14 + .../x86_64_accton_as5916_54xm_config.h | 137 ++ .../x86_64_accton_as5916_54xm_dox.h | 26 + .../x86_64_accton_as5916_54xm_porting.h | 107 ++ .../onlp/builds/src/module/make.mk | 10 + .../onlp/builds/src/module/src/Makefile | 9 + .../onlp/builds/src/module/src/debug.c | 45 + .../onlp/builds/src/module/src/fani.c | 366 +++++ .../onlp/builds/src/module/src/ledi.c | 249 ++++ .../onlp/builds/src/module/src/make.mk | 9 + .../onlp/builds/src/module/src/platform_lib.c | 202 +++ .../onlp/builds/src/module/src/platform_lib.h | 94 ++ .../onlp/builds/src/module/src/psui.c | 186 +++ .../onlp/builds/src/module/src/sfpi.c | 325 ++++ .../onlp/builds/src/module/src/sysi.c | 359 +++++ .../onlp/builds/src/module/src/thermali.c | 128 ++ .../src/x86_64_accton_as5916_54xm_config.c | 80 + .../src/x86_64_accton_as5916_54xm_enums.c | 10 + .../src/x86_64_accton_as5916_54xm_int.h | 12 + .../src/x86_64_accton_as5916_54xm_log.c | 18 + .../src/x86_64_accton_as5916_54xm_log.h | 12 + .../src/x86_64_accton_as5916_54xm_module.c | 24 + .../src/x86_64_accton_as5916_54xm_ucli.c | 50 + .../platform-config/Makefile | 1 + .../platform-config/r0/Makefile | 1 + .../platform-config/r0/PKG.yml | 1 + .../src/lib/x86-64-accton-as5916-54xm-r0.yml | 33 + .../x86_64_accton_as5916_54xm_r0/__init__.py | 92 ++ 48 files changed, 5248 insertions(+) create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/.gitignore create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/PKG.yml create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/.gitignore create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-fan.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-leds.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-psu.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-sfp.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/PKG.yml create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/lib/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/onlpdump/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/.module create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/README create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/make.mk create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm.x create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_config.h create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_dox.h create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_porting.h create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/make.mk create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/ledi.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/make.mk create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.h create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/psui.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sfpi.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/thermali.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_config.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_enums.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_int.h create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.h create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_module.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_ucli.c create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/Makefile create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/PKG.yml create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/lib/x86-64-accton-as5916-54xm-r0.yml create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/python/x86_64_accton_as5916_54xm_r0/__init__.py diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/.gitignore b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/.gitignore new file mode 100644 index 00000000..2e2944b3 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/.gitignore @@ -0,0 +1,2 @@ +*x86*64*accton*as5916*54x*.mk +onlpdump.mk diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/PKG.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/PKG.yml new file mode 100644 index 00000000..cb350f39 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/PKG.yml @@ -0,0 +1 @@ +!include $ONL_TEMPLATES/platform-modules.yml VENDOR=accton BASENAME=x86-64-accton-as5916-54xm ARCH=amd64 KERNELS="onl-kernel-3.16-lts-x86-64-all:amd64" diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/.gitignore b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/.gitignore new file mode 100644 index 00000000..a65b4177 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/.gitignore @@ -0,0 +1 @@ +lib diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/Makefile new file mode 100644 index 00000000..1ac65edf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/Makefile @@ -0,0 +1,6 @@ +KERNELS := onl-kernel-3.16-lts-x86-64-all:amd64 +KMODULES := $(wildcard *.c) +VENDOR := accton +BASENAME := x86-64-accton-as5916-54xm +ARCH := x86_64 +include $(ONL)/make/kmodule.mk diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-fan.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-fan.c new file mode 100644 index 00000000..9111ff2d --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-fan.c @@ -0,0 +1,485 @@ +/* + * A hwmon driver for the Accton as5916 54xm fan + * + * Copyright (C) 2016 Accton Technology Corporation. + * Brandon Chuang + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRVNAME "as5916_54xm_fan" +#define MAX_FAN_SPEED_RPM 25500 + +static struct as5916_54xm_fan_data *as5916_54xm_fan_update_device(struct device *dev); +static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da, + const char *buf, size_t count); + +/* fan related data, the index should match sysfs_fan_attributes + */ +static const u8 fan_reg[] = { + 0x0F, /* fan 1-6 present status */ + 0x10, /* fan 1-6 direction(0:B2F 1:F2B) */ + 0x11, /* fan PWM(for all fan) */ + 0x12, /* front fan 1 speed(rpm) */ + 0x13, /* front fan 2 speed(rpm) */ + 0x14, /* front fan 3 speed(rpm) */ + 0x15, /* front fan 4 speed(rpm) */ + 0x16, /* front fan 5 speed(rpm) */ + 0x17, /* front fan 6 speed(rpm) */ + 0x22, /* rear fan 1 speed(rpm) */ + 0x23, /* rear fan 2 speed(rpm) */ + 0x24, /* rear fan 3 speed(rpm) */ + 0x25, /* rear fan 4 speed(rpm) */ + 0x26, /* rear fan 5 speed(rpm) */ + 0x27, /* rear fan 6 speed(rpm) */ +}; + +/* Each client has this additional data */ +struct as5916_54xm_fan_data { + struct device *hwmon_dev; + struct mutex update_lock; + char valid; /* != 0 if registers are valid */ + unsigned long last_updated; /* In jiffies */ + u8 reg_val[ARRAY_SIZE(fan_reg)]; /* Register value */ +}; + +enum fan_id { + FAN1_ID, + FAN2_ID, + FAN3_ID, + FAN4_ID, + FAN5_ID, + FAN6_ID +}; + +enum sysfs_fan_attributes { + FAN_PRESENT_REG, + FAN_DIRECTION_REG, + FAN_DUTY_CYCLE_PERCENTAGE, /* Only one CPLD register to control duty cycle for all fans */ + FAN1_FRONT_SPEED_RPM, + FAN2_FRONT_SPEED_RPM, + FAN3_FRONT_SPEED_RPM, + FAN4_FRONT_SPEED_RPM, + FAN5_FRONT_SPEED_RPM, + FAN6_FRONT_SPEED_RPM, + FAN1_REAR_SPEED_RPM, + FAN2_REAR_SPEED_RPM, + FAN3_REAR_SPEED_RPM, + FAN4_REAR_SPEED_RPM, + FAN5_REAR_SPEED_RPM, + FAN6_REAR_SPEED_RPM, + FAN1_DIRECTION, + FAN2_DIRECTION, + FAN3_DIRECTION, + FAN4_DIRECTION, + FAN5_DIRECTION, + FAN6_DIRECTION, + FAN1_PRESENT, + FAN2_PRESENT, + FAN3_PRESENT, + FAN4_PRESENT, + FAN5_PRESENT, + FAN6_PRESENT, + FAN1_FAULT, + FAN2_FAULT, + FAN3_FAULT, + FAN4_FAULT, + FAN5_FAULT, + FAN6_FAULT, + FAN_MAX_RPM +}; + +/* Define attributes + */ +#define DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(index) \ + static SENSOR_DEVICE_ATTR(fan##index##_fault, S_IRUGO, fan_show_value, NULL, FAN##index##_FAULT) +#define DECLARE_FAN_FAULT_ATTR(index) &sensor_dev_attr_fan##index##_fault.dev_attr.attr + +#define DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(index) \ + static SENSOR_DEVICE_ATTR(fan##index##_direction, S_IRUGO, fan_show_value, NULL, FAN##index##_DIRECTION) +#define DECLARE_FAN_DIRECTION_ATTR(index) &sensor_dev_attr_fan##index##_direction.dev_attr.attr + +#define DECLARE_FAN_DUTY_CYCLE_SENSOR_DEV_ATTR(index) \ + static SENSOR_DEVICE_ATTR(fan##index##_duty_cycle_percentage, S_IWUSR | S_IRUGO, fan_show_value, set_duty_cycle, FAN##index##_DUTY_CYCLE_PERCENTAGE) +#define DECLARE_FAN_DUTY_CYCLE_ATTR(index) &sensor_dev_attr_fan##index##_duty_cycle_percentage.dev_attr.attr + +#define DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(index) \ + static SENSOR_DEVICE_ATTR(fan##index##_present, S_IRUGO, fan_show_value, NULL, FAN##index##_PRESENT) +#define DECLARE_FAN_PRESENT_ATTR(index) &sensor_dev_attr_fan##index##_present.dev_attr.attr + +#define DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(index) \ + static SENSOR_DEVICE_ATTR(fan##index##_front_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN##index##_FRONT_SPEED_RPM);\ + static SENSOR_DEVICE_ATTR(fan##index##_rear_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN##index##_REAR_SPEED_RPM) +#define DECLARE_FAN_SPEED_RPM_ATTR(index) &sensor_dev_attr_fan##index##_front_speed_rpm.dev_attr.attr, \ + &sensor_dev_attr_fan##index##_rear_speed_rpm.dev_attr.attr + +static SENSOR_DEVICE_ATTR(fan_max_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN_MAX_RPM); +#define DECLARE_FAN_MAX_RPM_ATTR(index) &sensor_dev_attr_fan_max_speed_rpm.dev_attr.attr + +/* 6 fan fault attributes in this platform */ +DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(1); +DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(2); +DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(3); +DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(4); +DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(5); +DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(6); +/* 6 fan speed(rpm) attributes in this platform */ +DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(1); +DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(2); +DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(3); +DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(4); +DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(5); +DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(6); +/* 6 fan present attributes in this platform */ +DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(1); +DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(2); +DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(3); +DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(4); +DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(5); +DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(6); +/* 6 fan direction attribute in this platform */ +DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(1); +DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(2); +DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(3); +DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(4); +DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(5); +DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(6); +/* 1 fan duty cycle attribute in this platform */ +DECLARE_FAN_DUTY_CYCLE_SENSOR_DEV_ATTR(); + +static struct attribute *as5916_54xm_fan_attributes[] = { + /* fan related attributes */ + DECLARE_FAN_FAULT_ATTR(1), + DECLARE_FAN_FAULT_ATTR(2), + DECLARE_FAN_FAULT_ATTR(3), + DECLARE_FAN_FAULT_ATTR(4), + DECLARE_FAN_FAULT_ATTR(5), + DECLARE_FAN_FAULT_ATTR(6), + DECLARE_FAN_SPEED_RPM_ATTR(1), + DECLARE_FAN_SPEED_RPM_ATTR(2), + DECLARE_FAN_SPEED_RPM_ATTR(3), + DECLARE_FAN_SPEED_RPM_ATTR(4), + DECLARE_FAN_SPEED_RPM_ATTR(5), + DECLARE_FAN_SPEED_RPM_ATTR(6), + DECLARE_FAN_PRESENT_ATTR(1), + DECLARE_FAN_PRESENT_ATTR(2), + DECLARE_FAN_PRESENT_ATTR(3), + DECLARE_FAN_PRESENT_ATTR(4), + DECLARE_FAN_PRESENT_ATTR(5), + DECLARE_FAN_PRESENT_ATTR(6), + DECLARE_FAN_DIRECTION_ATTR(1), + DECLARE_FAN_DIRECTION_ATTR(2), + DECLARE_FAN_DIRECTION_ATTR(3), + DECLARE_FAN_DIRECTION_ATTR(4), + DECLARE_FAN_DIRECTION_ATTR(5), + DECLARE_FAN_DIRECTION_ATTR(6), + DECLARE_FAN_DUTY_CYCLE_ATTR(), + DECLARE_FAN_MAX_RPM_ATTR(), + NULL +}; + +#define FAN_DUTY_CYCLE_REG_MASK 0xF +#define FAN_MAX_DUTY_CYCLE 100 +#define FAN_REG_VAL_TO_SPEED_RPM_STEP 100 + +static int as5916_54xm_fan_read_value(struct i2c_client *client, u8 reg) +{ + return i2c_smbus_read_byte_data(client, reg); +} + +static int as5916_54xm_fan_write_value(struct i2c_client *client, u8 reg, u8 value) +{ + return i2c_smbus_write_byte_data(client, reg, value); +} + +/* fan utility functions + */ +static u32 reg_val_to_duty_cycle(u8 reg_val) +{ + reg_val &= FAN_DUTY_CYCLE_REG_MASK; + return ((u32)(reg_val+1) * 625 + 75)/ 100; +} + +static u8 duty_cycle_to_reg_val(u8 duty_cycle) +{ + return ((u32)duty_cycle * 100 / 625) - 1; +} + +static u32 reg_val_to_speed_rpm(u8 reg_val) +{ + return (u32)reg_val * FAN_REG_VAL_TO_SPEED_RPM_STEP; +} + +static u8 reg_val_to_direction(u8 reg_val, enum fan_id id) +{ + return !!(reg_val & BIT(id)); +} + +static u8 reg_val_to_is_present(u8 reg_val, enum fan_id id) +{ + return !(reg_val & BIT(id)); +} + +static u8 is_fan_fault(struct as5916_54xm_fan_data *data, enum fan_id id) +{ + u8 ret = 1; + int front_fan_index = FAN1_FRONT_SPEED_RPM + id; + int rear_fan_index = FAN1_REAR_SPEED_RPM + id; + + /* Check if the speed of front or rear fan is ZERO, + */ + if (reg_val_to_speed_rpm(data->reg_val[front_fan_index]) && + reg_val_to_speed_rpm(data->reg_val[rear_fan_index])) { + ret = 0; + } + + return ret; +} + +static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da, + const char *buf, size_t count) +{ + int error, value; + struct i2c_client *client = to_i2c_client(dev); + + error = kstrtoint(buf, 10, &value); + if (error) + return error; + + if (value < 0 || value > FAN_MAX_DUTY_CYCLE) + return -EINVAL; + + as5916_54xm_fan_write_value(client, 0x33, 0); /* Disable fan speed watch dog */ + as5916_54xm_fan_write_value(client, fan_reg[FAN_DUTY_CYCLE_PERCENTAGE], duty_cycle_to_reg_val(value)); + return count; +} + +static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); + struct as5916_54xm_fan_data *data = as5916_54xm_fan_update_device(dev); + ssize_t ret = 0; + + if (data->valid) { + switch (attr->index) { + case FAN_DUTY_CYCLE_PERCENTAGE: + { + u32 duty_cycle = reg_val_to_duty_cycle(data->reg_val[FAN_DUTY_CYCLE_PERCENTAGE]); + ret = sprintf(buf, "%u\n", duty_cycle); + break; + } + case FAN1_FRONT_SPEED_RPM: + case FAN2_FRONT_SPEED_RPM: + case FAN3_FRONT_SPEED_RPM: + case FAN4_FRONT_SPEED_RPM: + case FAN5_FRONT_SPEED_RPM: + case FAN6_FRONT_SPEED_RPM: + case FAN1_REAR_SPEED_RPM: + case FAN2_REAR_SPEED_RPM: + case FAN3_REAR_SPEED_RPM: + case FAN4_REAR_SPEED_RPM: + case FAN5_REAR_SPEED_RPM: + case FAN6_REAR_SPEED_RPM: + ret = sprintf(buf, "%u\n", reg_val_to_speed_rpm(data->reg_val[attr->index])); + break; + case FAN1_PRESENT: + case FAN2_PRESENT: + case FAN3_PRESENT: + case FAN4_PRESENT: + case FAN5_PRESENT: + case FAN6_PRESENT: + ret = sprintf(buf, "%d\n", + reg_val_to_is_present(data->reg_val[FAN_PRESENT_REG], + attr->index - FAN1_PRESENT)); + break; + case FAN1_FAULT: + case FAN2_FAULT: + case FAN3_FAULT: + case FAN4_FAULT: + case FAN5_FAULT: + case FAN6_FAULT: + ret = sprintf(buf, "%d\n", is_fan_fault(data, attr->index - FAN1_FAULT)); + break; + case FAN1_DIRECTION: + case FAN2_DIRECTION: + case FAN3_DIRECTION: + case FAN4_DIRECTION: + case FAN5_DIRECTION: + case FAN6_DIRECTION: + ret = sprintf(buf, "%d\n", + reg_val_to_direction(data->reg_val[FAN_DIRECTION_REG], + attr->index - FAN1_DIRECTION)); + break; + case FAN_MAX_RPM: + ret = sprintf(buf, "%d\n", MAX_FAN_SPEED_RPM); + default: + break; + } + } + + return ret; +} + +static const struct attribute_group as5916_54xm_fan_group = { + .attrs = as5916_54xm_fan_attributes, +}; + +static struct as5916_54xm_fan_data *as5916_54xm_fan_update_device(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as5916_54xm_fan_data *data = i2c_get_clientdata(client); + + mutex_lock(&data->update_lock); + + if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || + !data->valid) { + int i; + + dev_dbg(&client->dev, "Starting as5916_54xm_fan update\n"); + data->valid = 0; + + /* Update fan data + */ + for (i = 0; i < ARRAY_SIZE(data->reg_val); i++) { + int status = as5916_54xm_fan_read_value(client, fan_reg[i]); + + if (status < 0) { + data->valid = 0; + mutex_unlock(&data->update_lock); + dev_dbg(&client->dev, "reg %d, err %d\n", fan_reg[i], status); + return data; + } + else { + data->reg_val[i] = status; + } + } + + data->last_updated = jiffies; + data->valid = 1; + } + + mutex_unlock(&data->update_lock); + + return data; +} + +static int as5916_54xm_fan_probe(struct i2c_client *client, + const struct i2c_device_id *dev_id) +{ + struct as5916_54xm_fan_data *data; + int status; + + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { + status = -EIO; + goto exit; + } + + data = kzalloc(sizeof(struct as5916_54xm_fan_data), GFP_KERNEL); + if (!data) { + status = -ENOMEM; + goto exit; + } + + i2c_set_clientdata(client, data); + data->valid = 0; + mutex_init(&data->update_lock); + + dev_info(&client->dev, "chip found\n"); + + /* Register sysfs hooks */ + status = sysfs_create_group(&client->dev.kobj, &as5916_54xm_fan_group); + if (status) { + goto exit_free; + } + + data->hwmon_dev = hwmon_device_register(&client->dev); + if (IS_ERR(data->hwmon_dev)) { + status = PTR_ERR(data->hwmon_dev); + goto exit_remove; + } + + dev_info(&client->dev, "%s: fan '%s'\n", + dev_name(data->hwmon_dev), client->name); + + return 0; + +exit_remove: + sysfs_remove_group(&client->dev.kobj, &as5916_54xm_fan_group); +exit_free: + kfree(data); +exit: + + return status; +} + +static int as5916_54xm_fan_remove(struct i2c_client *client) +{ + struct as5916_54xm_fan_data *data = i2c_get_clientdata(client); + hwmon_device_unregister(data->hwmon_dev); + sysfs_remove_group(&client->dev.kobj, &as5916_54xm_fan_group); + + return 0; +} + +/* Addresses to scan */ +static const unsigned short normal_i2c[] = { 0x66, I2C_CLIENT_END }; + +static const struct i2c_device_id as5916_54xm_fan_id[] = { + { "as5916_54xm_fan", 0 }, + {} +}; +MODULE_DEVICE_TABLE(i2c, as5916_54xm_fan_id); + +static struct i2c_driver as5916_54xm_fan_driver = { + .class = I2C_CLASS_HWMON, + .driver = { + .name = DRVNAME, + }, + .probe = as5916_54xm_fan_probe, + .remove = as5916_54xm_fan_remove, + .id_table = as5916_54xm_fan_id, + .address_list = normal_i2c, +}; + +static int __init as5916_54xm_fan_init(void) +{ + return i2c_add_driver(&as5916_54xm_fan_driver); +} + +static void __exit as5916_54xm_fan_exit(void) +{ + i2c_del_driver(&as5916_54xm_fan_driver); +} + +module_init(as5916_54xm_fan_init); +module_exit(as5916_54xm_fan_exit); + +MODULE_AUTHOR("Brandon Chuang "); +MODULE_DESCRIPTION("as5916_54xm_fan driver"); +MODULE_LICENSE("GPL"); + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-leds.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-leds.c new file mode 100644 index 00000000..a0c31b13 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-leds.c @@ -0,0 +1,378 @@ +/* + * A LED driver for the accton_as5916_54xm_led + * + * Copyright (C) 2016 Accton Technology Corporation. + * Brandon Chuang + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define DRVNAME "accton_as5916_54xm_led" + +#define DEBUG_MODE 1 + +#if (DEBUG_MODE == 1) + #define DEBUG_PRINT(fmt, args...) \ + printk (KERN_INFO "%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) +#else + #define DEBUG_PRINT(fmt, args...) +#endif + +extern int accton_i2c_cpld_read(unsigned short cpld_addr, u8 reg); +extern int accton_i2c_cpld_write(unsigned short cpld_addr, u8 reg, u8 value); + +struct accton_as5916_54xm_led_data { + struct platform_device *pdev; + struct mutex update_lock; + char valid; /* != 0 if registers are valid */ + unsigned long last_updated; /* In jiffies */ + u8 reg_val[2]; /* Register value, 0 = RELEASE/DIAG LED, + 1 = FAN/PSU LED, + 2 ~ 4 = SYSTEM LED */ +}; + +static struct accton_as5916_54xm_led_data *ledctl = NULL; + +#define LED_CNTRLER_I2C_ADDRESS (0x60) + +#define LED_TYPE_DIAG_REG_MASK (0x0C) +#define LED_MODE_DIAG_GREEN_VALUE (0x04) +#define LED_MODE_DIAG_AMBER_VALUE (0x08) +#define LED_MODE_DIAG_OFF_VALUE (0x0C) + + +#define LED_TYPE_LOC_REG_MASK (0x10) +#define LED_MODE_LOC_AMBER_VALUE (0x00) +#define LED_MODE_LOC_OFF_VALUE (0x10) + +static const u8 led_reg[] = { + 0x65, /* LOC/DIAG/FAN LED */ + 0x66, /* PSU LED */ +}; + +enum led_type { + LED_TYPE_DIAG, + LED_TYPE_LOC, + LED_TYPE_FAN, + LED_TYPE_PSU1, + LED_TYPE_PSU2 +}; + +/* FAN/PSU/DIAG/RELEASE led mode */ +enum led_light_mode { + LED_MODE_OFF = 0, + LED_MODE_GREEN, + LED_MODE_GREEN_BLINK, + LED_MODE_AMBER, + LED_MODE_AMBER_BLINK, + LED_MODE_RED, + LED_MODE_RED_BLINK, + LED_MODE_BLUE, + LED_MODE_BLUE_BLINK, + LED_MODE_AUTO, + LED_MODE_UNKNOWN +}; + +struct led_type_mode { + enum led_type type; + enum led_light_mode mode; + int type_mask; + int mode_value; +}; + +static struct led_type_mode led_type_mode_data[] = { +{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE}, +{LED_TYPE_LOC, LED_MODE_AMBER, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_AMBER_VALUE}, +{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE}, +{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_GREEN_VALUE}, +{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE}, +}; + +static int led_reg_val_to_light_mode(enum led_type type, u8 reg_val) { + int i; + + for (i = 0; i < ARRAY_SIZE(led_type_mode_data); i++) { + if (type != led_type_mode_data[i].type) { + continue; + } + + if ((led_type_mode_data[i].type_mask & reg_val) == + led_type_mode_data[i].mode_value) { + return led_type_mode_data[i].mode; + } + } + + return LED_MODE_UNKNOWN; +} + +static u8 led_light_mode_to_reg_val(enum led_type type, + enum led_light_mode mode, u8 reg_val) { + int i; + + for (i = 0; i < ARRAY_SIZE(led_type_mode_data); i++) { + int type_mask, mode_value; + + if (type != led_type_mode_data[i].type) + continue; + + if (mode != led_type_mode_data[i].mode) + continue; + + type_mask = led_type_mode_data[i].type_mask; + mode_value = led_type_mode_data[i].mode_value; + reg_val = (reg_val & ~type_mask) | mode_value; + } + + return reg_val; +} + +static int accton_as5916_54xm_led_read_value(u8 reg) +{ + return accton_i2c_cpld_read(LED_CNTRLER_I2C_ADDRESS, reg); +} + +static int accton_as5916_54xm_led_write_value(u8 reg, u8 value) +{ + return accton_i2c_cpld_write(LED_CNTRLER_I2C_ADDRESS, reg, value); +} + +static void accton_as5916_54xm_led_update(void) +{ + mutex_lock(&ledctl->update_lock); + + if (time_after(jiffies, ledctl->last_updated + HZ + HZ / 2) + || !ledctl->valid) { + int i; + + dev_dbg(&ledctl->pdev->dev, "Starting accton_as5916_54xm_led update\n"); + ledctl->valid = 0; + + /* Update LED data + */ + for (i = 0; i < ARRAY_SIZE(ledctl->reg_val); i++) { + int status = accton_as5916_54xm_led_read_value(led_reg[i]); + + if (status < 0) { + dev_dbg(&ledctl->pdev->dev, "reg %d, err %d\n", led_reg[i], status); + goto exit; + } + else + ledctl->reg_val[i] = status; + } + + ledctl->last_updated = jiffies; + ledctl->valid = 1; + } + +exit: + mutex_unlock(&ledctl->update_lock); +} + +static void accton_as5916_54xm_led_set(struct led_classdev *led_cdev, + enum led_brightness led_light_mode, + u8 reg, enum led_type type) +{ + int reg_val; + + mutex_lock(&ledctl->update_lock); + reg_val = accton_as5916_54xm_led_read_value(reg); + + if (reg_val < 0) { + dev_dbg(&ledctl->pdev->dev, "reg %d, err %d\n", reg, reg_val); + goto exit; + } + + reg_val = led_light_mode_to_reg_val(type, led_light_mode, reg_val); + + accton_as5916_54xm_led_write_value(reg, reg_val); + ledctl->valid = 0; + +exit: + mutex_unlock(&ledctl->update_lock); +} + +static void accton_as7312_54xm_led_auto_set(struct led_classdev *led_cdev, + enum led_brightness led_light_mode) +{ +} + +static enum led_brightness accton_as7312_54xm_led_auto_get(struct led_classdev *cdev) +{ + return LED_MODE_AUTO; +} + +static void accton_as5916_54xm_led_diag_set(struct led_classdev *led_cdev, + enum led_brightness led_light_mode) +{ + accton_as5916_54xm_led_set(led_cdev, led_light_mode, led_reg[0], LED_TYPE_DIAG); +} + +static enum led_brightness accton_as5916_54xm_led_diag_get(struct led_classdev *cdev) +{ + accton_as5916_54xm_led_update(); + return led_reg_val_to_light_mode(LED_TYPE_DIAG, ledctl->reg_val[0]); +} + +static enum led_brightness accton_as5916_54xm_led_loc_get(struct led_classdev *cdev) +{ + accton_as5916_54xm_led_update(); + return led_reg_val_to_light_mode(LED_TYPE_LOC, ledctl->reg_val[0]); +} + +static void accton_as5916_54xm_led_loc_set(struct led_classdev *led_cdev, + enum led_brightness led_light_mode) +{ + accton_as5916_54xm_led_set(led_cdev, led_light_mode, led_reg[0], LED_TYPE_LOC); +} + +static struct led_classdev accton_as5916_54xm_leds[] = { + [LED_TYPE_LOC] = { + .name = "accton_as5916_54xm_led::loc", + .default_trigger = "unused", + .brightness_set = accton_as5916_54xm_led_loc_set, + .brightness_get = accton_as5916_54xm_led_loc_get, + .max_brightness = LED_MODE_AMBER, + }, + [LED_TYPE_DIAG] = { + .name = "accton_as5916_54xm_led::diag", + .default_trigger = "unused", + .brightness_set = accton_as5916_54xm_led_diag_set, + .brightness_get = accton_as5916_54xm_led_diag_get, + .max_brightness = LED_MODE_AMBER, + }, + [LED_TYPE_PSU1] = { + .name = "accton_as5916_54xm_led::psu1", + .default_trigger = "unused", + .brightness_set = accton_as7312_54xm_led_auto_set, + .brightness_get = accton_as7312_54xm_led_auto_get, + .max_brightness = LED_MODE_AUTO, + }, + [LED_TYPE_PSU2] = { + .name = "accton_as5916_54xm_led::psu2", + .default_trigger = "unused", + .brightness_set = accton_as7312_54xm_led_auto_set, + .brightness_get = accton_as7312_54xm_led_auto_get, + .max_brightness = LED_MODE_AUTO, + }, + [LED_TYPE_FAN] = { + .name = "accton_as5916_54xm_led::fan", + .default_trigger = "unused", + .brightness_set = accton_as7312_54xm_led_auto_set, + .brightness_get = accton_as7312_54xm_led_auto_get, + .max_brightness = LED_MODE_AUTO, + }, +}; + +static int accton_as5916_54xm_led_probe(struct platform_device *pdev) +{ + int ret, i; + + for (i = 0; i < ARRAY_SIZE(accton_as5916_54xm_leds); i++) { + ret = led_classdev_register(&pdev->dev, &accton_as5916_54xm_leds[i]); + + if (ret < 0) { + break; + } + } + + /* Check if all LEDs were successfully registered */ + if (i != ARRAY_SIZE(accton_as5916_54xm_leds)){ + int j; + + /* only unregister the LEDs that were successfully registered */ + for (j = 0; j < i; j++) { + led_classdev_unregister(&accton_as5916_54xm_leds[i]); + } + } + + return ret; +} + +static int accton_as5916_54xm_led_remove(struct platform_device *pdev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(accton_as5916_54xm_leds); i++) { + led_classdev_unregister(&accton_as5916_54xm_leds[i]); + } + + return 0; +} + +static struct platform_driver accton_as5916_54xm_led_driver = { + .probe = accton_as5916_54xm_led_probe, + .remove = accton_as5916_54xm_led_remove, + .driver = { + .name = DRVNAME, + .owner = THIS_MODULE, + }, +}; + +static int __init accton_as5916_54xm_led_init(void) +{ + int ret; + + ret = platform_driver_register(&accton_as5916_54xm_led_driver); + if (ret < 0) { + goto exit; + } + + ledctl = kzalloc(sizeof(struct accton_as5916_54xm_led_data), GFP_KERNEL); + if (!ledctl) { + ret = -ENOMEM; + goto exit_driver; + } + + mutex_init(&ledctl->update_lock); + + ledctl->pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0); + if (IS_ERR(ledctl->pdev)) { + ret = PTR_ERR(ledctl->pdev); + goto exit_free; + } + + return 0; + +exit_free: + kfree(ledctl); +exit_driver: + platform_driver_unregister(&accton_as5916_54xm_led_driver); +exit: + return ret; +} + +static void __exit accton_as5916_54xm_led_exit(void) +{ + platform_device_unregister(ledctl->pdev); + platform_driver_unregister(&accton_as5916_54xm_led_driver); + kfree(ledctl); +} + +late_initcall(accton_as5916_54xm_led_init); +module_exit(accton_as5916_54xm_led_exit); + +MODULE_AUTHOR("Brandon Chuang "); +MODULE_DESCRIPTION("accton_as5916_54xm_led driver"); +MODULE_LICENSE("GPL"); + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-psu.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-psu.c new file mode 100644 index 00000000..90f44103 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-psu.c @@ -0,0 +1,288 @@ +/* + * An hwmon driver for accton as5916_54xm Power Module + * + * Copyright (C) 2014 Accton Technology Corporation. + * Brandon Chuang + * + * Based on ad7414.c + * Copyright 2006 Stefan Roese , DENX Software Engineering + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf); +static int as5916_54xm_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); +extern int accton_i2c_cpld_read(unsigned short cpld_addr, u8 reg); + +/* Addresses scanned + */ +static const unsigned short normal_i2c[] = { I2C_CLIENT_END }; + +/* Each client has this additional data + */ +struct as5916_54xm_psu_data { + struct device *hwmon_dev; + struct mutex update_lock; + char valid; /* !=0 if registers are valid */ + unsigned long last_updated; /* In jiffies */ + u8 index; /* PSU index */ + u8 status; /* Status(present/power_good) register read from CPLD */ + char model_name[9]; /* Model name, read from eeprom */ +}; + +static struct as5916_54xm_psu_data *as5916_54xm_psu_update_device(struct device *dev); + +enum as5916_54xm_psu_sysfs_attributes { + PSU_PRESENT, + PSU_MODEL_NAME, + PSU_POWER_GOOD +}; + +/* sysfs attributes for hwmon + */ +static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT); +static SENSOR_DEVICE_ATTR(psu_model_name, S_IRUGO, show_model_name,NULL, PSU_MODEL_NAME); +static SENSOR_DEVICE_ATTR(psu_power_good, S_IRUGO, show_status, NULL, PSU_POWER_GOOD); + +static struct attribute *as5916_54xm_psu_attributes[] = { + &sensor_dev_attr_psu_present.dev_attr.attr, + &sensor_dev_attr_psu_model_name.dev_attr.attr, + &sensor_dev_attr_psu_power_good.dev_attr.attr, + NULL +}; + +static ssize_t show_status(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); + struct as5916_54xm_psu_data *data = as5916_54xm_psu_update_device(dev); + u8 status = 0; + + if (attr->index == PSU_PRESENT) { + status = !(data->status & BIT(1 - data->index));; + } + else { /* PSU_POWER_GOOD */ + status = !!(data->status & BIT(3 - data->index)); + } + + return sprintf(buf, "%d\n", status); +} + +static ssize_t show_model_name(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct as5916_54xm_psu_data *data = as5916_54xm_psu_update_device(dev); + + return sprintf(buf, "%s\n", data->model_name); +} + +static const struct attribute_group as5916_54xm_psu_group = { + .attrs = as5916_54xm_psu_attributes, +}; + +static int as5916_54xm_psu_probe(struct i2c_client *client, + const struct i2c_device_id *dev_id) +{ + struct as5916_54xm_psu_data *data; + int status; + + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) { + status = -EIO; + goto exit; + } + + data = kzalloc(sizeof(struct as5916_54xm_psu_data), GFP_KERNEL); + if (!data) { + status = -ENOMEM; + goto exit; + } + + i2c_set_clientdata(client, data); + data->valid = 0; + data->index = dev_id->driver_data; + mutex_init(&data->update_lock); + + dev_info(&client->dev, "chip found\n"); + + /* Register sysfs hooks */ + status = sysfs_create_group(&client->dev.kobj, &as5916_54xm_psu_group); + if (status) { + goto exit_free; + } + + data->hwmon_dev = hwmon_device_register(&client->dev); + if (IS_ERR(data->hwmon_dev)) { + status = PTR_ERR(data->hwmon_dev); + goto exit_remove; + } + + dev_info(&client->dev, "%s: psu '%s'\n", + dev_name(data->hwmon_dev), client->name); + + return 0; + +exit_remove: + sysfs_remove_group(&client->dev.kobj, &as5916_54xm_psu_group); +exit_free: + kfree(data); +exit: + + return status; +} + +static int as5916_54xm_psu_remove(struct i2c_client *client) +{ + struct as5916_54xm_psu_data *data = i2c_get_clientdata(client); + + hwmon_device_unregister(data->hwmon_dev); + sysfs_remove_group(&client->dev.kobj, &as5916_54xm_psu_group); + kfree(data); + + return 0; +} + +enum psu_index +{ + as5916_54xm_psu1, + as5916_54xm_psu2 +}; + +static const struct i2c_device_id as5916_54xm_psu_id[] = { + { "as5916_54xm_psu1", as5916_54xm_psu1 }, + { "as5916_54xm_psu2", as5916_54xm_psu2 }, + {} +}; +MODULE_DEVICE_TABLE(i2c, as5916_54xm_psu_id); + +static struct i2c_driver as5916_54xm_psu_driver = { + .class = I2C_CLASS_HWMON, + .driver = { + .name = "as5916_54xm_psu", + }, + .probe = as5916_54xm_psu_probe, + .remove = as5916_54xm_psu_remove, + .id_table = as5916_54xm_psu_id, + .address_list = normal_i2c, +}; + +static int as5916_54xm_psu_read_block(struct i2c_client *client, u8 command, u8 *data, + int data_len) +{ + int result = 0; + int retry_count = 5; + + while (retry_count) { + retry_count--; + + result = i2c_smbus_read_i2c_block_data(client, command, data_len, data); + + if (unlikely(result < 0)) { + msleep(10); + continue; + } + + if (unlikely(result != data_len)) { + result = -EIO; + msleep(10); + continue; + } + + result = 0; + break; + } + + return result; +} + +static struct as5916_54xm_psu_data *as5916_54xm_psu_update_device(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as5916_54xm_psu_data *data = i2c_get_clientdata(client); + + mutex_lock(&data->update_lock); + + if (time_after(jiffies, data->last_updated + HZ + HZ / 2) + || !data->valid) { + int status; + int power_good = 0; + + dev_dbg(&client->dev, "Starting as5916_54xm update\n"); + + /* Read psu status */ + status = accton_i2c_cpld_read(0x60, 0x2); + + if (status < 0) { + dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); + } + else { + data->status = status; + } + + /* Read model name */ + memset(data->model_name, 0, sizeof(data->model_name)); + power_good = data->status & BIT(3 - data->index); + + if (power_good) { + status = as5916_54xm_psu_read_block(client, 0x20, data->model_name, + ARRAY_SIZE(data->model_name)-1); + + if (status < 0) { + data->model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); + } + else { + data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; + } + } + + data->last_updated = jiffies; + data->valid = 1; + } + + mutex_unlock(&data->update_lock); + + return data; +} + +static int __init as5916_54xm_psu_init(void) +{ + return i2c_add_driver(&as5916_54xm_psu_driver); +} + +static void __exit as5916_54xm_psu_exit(void) +{ + i2c_del_driver(&as5916_54xm_psu_driver); +} + +module_init(as5916_54xm_psu_init); +module_exit(as5916_54xm_psu_exit); + +MODULE_AUTHOR("Brandon Chuang "); +MODULE_DESCRIPTION("as5916_54xm_psu driver"); +MODULE_LICENSE("GPL"); + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-sfp.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-sfp.c new file mode 100644 index 00000000..de1ed9bc --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/modules/builds/x86-64-accton-as5916-54xm-sfp.c @@ -0,0 +1,1315 @@ +/* + * SFP driver for accton as5916_54xm sfp + * + * Copyright (C) Brandon Chuang + * + * Based on ad7414.c + * Copyright 2006 Stefan Roese , DENX Software Engineering + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRIVER_NAME "as5916_54xm_sfp" /* Platform dependent */ + +#define DEBUG_MODE 0 + +#if (DEBUG_MODE == 1) + #define DEBUG_PRINT(fmt, args...) \ + printk (KERN_INFO "%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) +#else + #define DEBUG_PRINT(fmt, args...) +#endif + +#define NUM_OF_SFP_PORT 54 +#define EEPROM_NAME "sfp_eeprom" +#define EEPROM_SIZE 256 /* 256 byte eeprom */ +#define BIT_INDEX(i) (1ULL << (i)) +#define USE_I2C_BLOCK_READ 1 /* Platform dependent */ +#define I2C_RW_RETRY_COUNT 3 +#define I2C_RW_RETRY_INTERVAL 100 /* ms */ + +#define SFP_EEPROM_A0_I2C_ADDR (0xA0 >> 1) +#define SFP_EEPROM_A2_I2C_ADDR (0xA2 >> 1) + +#define SFF8024_PHYSICAL_DEVICE_ID_ADDR 0x0 +#define SFF8024_DEVICE_ID_SFP 0x3 +#define SFF8024_DEVICE_ID_QSFP 0xC +#define SFF8024_DEVICE_ID_QSFP_PLUS 0xD +#define SFF8024_DEVICE_ID_QSFP28 0x11 + +#define SFF8472_DIAG_MON_TYPE_ADDR 92 +#define SFF8472_DIAG_MON_TYPE_DDM_MASK 0x40 +#define SFF8472_10G_ETH_COMPLIANCE_ADDR 0x3 +#define SFF8472_10G_BASE_MASK 0xF0 + +#define SFF8436_RX_LOS_ADDR 3 +#define SFF8436_TX_FAULT_ADDR 4 +#define SFF8436_TX_DISABLE_ADDR 86 + +/* Platform dependent +++ */ +#define I2C_ADDR_CPLD1 0x60 +#define I2C_ADDR_CPLD2 0x62 +/* Platform dependent --- */ + +static ssize_t show_port_number(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t show_port_type(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t show_present(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t sfp_show_tx_rx_status(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t qsfp_show_tx_rx_status(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t sfp_set_tx_disable(struct device *dev, struct device_attribute *da, const char *buf, size_t count); +static ssize_t qsfp_set_tx_disable(struct device *dev, struct device_attribute *da, const char *buf, size_t count);; +static ssize_t sfp_show_ddm_implemented(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t sfp_eeprom_read(struct i2c_client *, u8, u8 *,int); +static ssize_t sfp_eeprom_write(struct i2c_client *, u8 , const char *,int); +extern int accton_i2c_cpld_read(unsigned short cpld_addr, u8 reg); +extern int accton_i2c_cpld_write(unsigned short cpld_addr, u8 reg, u8 value); + +enum sfp_sysfs_attributes { + PRESENT, + PRESENT_ALL, + PORT_NUMBER, + PORT_TYPE, + DDM_IMPLEMENTED, + TX_FAULT, + TX_FAULT1, + TX_FAULT2, + TX_FAULT3, + TX_FAULT4, + TX_DISABLE, + TX_DISABLE1, + TX_DISABLE2, + TX_DISABLE3, + TX_DISABLE4, + RX_LOS, + RX_LOS1, + RX_LOS2, + RX_LOS3, + RX_LOS4, + RX_LOS_ALL +}; + +/* SFP/QSFP common attributes for sysfs */ +static SENSOR_DEVICE_ATTR(sfp_port_number, S_IRUGO, show_port_number, NULL, PORT_NUMBER); +static SENSOR_DEVICE_ATTR(sfp_port_type, S_IRUGO, show_port_type, NULL, PORT_TYPE); +static SENSOR_DEVICE_ATTR(sfp_is_present, S_IRUGO, show_present, NULL, PRESENT); +static SENSOR_DEVICE_ATTR(sfp_is_present_all, S_IRUGO, show_present, NULL, PRESENT_ALL); +static SENSOR_DEVICE_ATTR(sfp_rx_los, S_IRUGO, sfp_show_tx_rx_status, NULL, RX_LOS); +static SENSOR_DEVICE_ATTR(sfp_tx_disable, S_IWUSR | S_IRUGO, sfp_show_tx_rx_status, sfp_set_tx_disable, TX_DISABLE); +static SENSOR_DEVICE_ATTR(sfp_tx_fault, S_IRUGO, sfp_show_tx_rx_status, NULL, TX_FAULT); + +/* QSFP attributes for sysfs */ +static SENSOR_DEVICE_ATTR(sfp_rx_los1, S_IRUGO, qsfp_show_tx_rx_status, NULL, RX_LOS1); +static SENSOR_DEVICE_ATTR(sfp_rx_los2, S_IRUGO, qsfp_show_tx_rx_status, NULL, RX_LOS2); +static SENSOR_DEVICE_ATTR(sfp_rx_los3, S_IRUGO, qsfp_show_tx_rx_status, NULL, RX_LOS3); +static SENSOR_DEVICE_ATTR(sfp_rx_los4, S_IRUGO, qsfp_show_tx_rx_status, NULL, RX_LOS4); +static SENSOR_DEVICE_ATTR(sfp_tx_disable1, S_IWUSR | S_IRUGO, qsfp_show_tx_rx_status, qsfp_set_tx_disable, TX_DISABLE1); +static SENSOR_DEVICE_ATTR(sfp_tx_disable2, S_IWUSR | S_IRUGO, qsfp_show_tx_rx_status, qsfp_set_tx_disable, TX_DISABLE2); +static SENSOR_DEVICE_ATTR(sfp_tx_disable3, S_IWUSR | S_IRUGO, qsfp_show_tx_rx_status, qsfp_set_tx_disable, TX_DISABLE3); +static SENSOR_DEVICE_ATTR(sfp_tx_disable4, S_IWUSR | S_IRUGO, qsfp_show_tx_rx_status, qsfp_set_tx_disable, TX_DISABLE4); +static SENSOR_DEVICE_ATTR(sfp_tx_fault1, S_IRUGO, qsfp_show_tx_rx_status, NULL, TX_FAULT1); +static SENSOR_DEVICE_ATTR(sfp_tx_fault2, S_IRUGO, qsfp_show_tx_rx_status, NULL, TX_FAULT2); +static SENSOR_DEVICE_ATTR(sfp_tx_fault3, S_IRUGO, qsfp_show_tx_rx_status, NULL, TX_FAULT3); +static SENSOR_DEVICE_ATTR(sfp_tx_fault4, S_IRUGO, qsfp_show_tx_rx_status, NULL, TX_FAULT4); +static struct attribute *qsfp_attributes[] = { + &sensor_dev_attr_sfp_port_number.dev_attr.attr, + &sensor_dev_attr_sfp_port_type.dev_attr.attr, + &sensor_dev_attr_sfp_is_present.dev_attr.attr, + &sensor_dev_attr_sfp_is_present_all.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los1.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los2.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los3.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los4.dev_attr.attr, + &sensor_dev_attr_sfp_tx_disable.dev_attr.attr, + &sensor_dev_attr_sfp_tx_disable1.dev_attr.attr, + &sensor_dev_attr_sfp_tx_disable2.dev_attr.attr, + &sensor_dev_attr_sfp_tx_disable3.dev_attr.attr, + &sensor_dev_attr_sfp_tx_disable4.dev_attr.attr, + &sensor_dev_attr_sfp_tx_fault.dev_attr.attr, + &sensor_dev_attr_sfp_tx_fault1.dev_attr.attr, + &sensor_dev_attr_sfp_tx_fault2.dev_attr.attr, + &sensor_dev_attr_sfp_tx_fault3.dev_attr.attr, + &sensor_dev_attr_sfp_tx_fault4.dev_attr.attr, + NULL +}; + +/* SFP msa attributes for sysfs */ +static SENSOR_DEVICE_ATTR(sfp_ddm_implemented, S_IRUGO, sfp_show_ddm_implemented, NULL, DDM_IMPLEMENTED); +static SENSOR_DEVICE_ATTR(sfp_rx_los_all, S_IRUGO, sfp_show_tx_rx_status, NULL, RX_LOS_ALL); +static struct attribute *sfp_msa_attributes[] = { + &sensor_dev_attr_sfp_port_number.dev_attr.attr, + &sensor_dev_attr_sfp_port_type.dev_attr.attr, + &sensor_dev_attr_sfp_is_present.dev_attr.attr, + &sensor_dev_attr_sfp_is_present_all.dev_attr.attr, + &sensor_dev_attr_sfp_ddm_implemented.dev_attr.attr, + &sensor_dev_attr_sfp_tx_fault.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los.dev_attr.attr, + &sensor_dev_attr_sfp_rx_los_all.dev_attr.attr, + &sensor_dev_attr_sfp_tx_disable.dev_attr.attr, + NULL +}; + +/* SFP ddm attributes for sysfs */ +static struct attribute *sfp_ddm_attributes[] = { + NULL +}; + +/* Platform dependent +++ */ +#define CPLD_PORT_TO_FRONT_PORT(port) (port+1) + +enum port_numbers { +as5916_54xm_sfp1, as5916_54xm_sfp2, as5916_54xm_sfp3, as5916_54xm_sfp4, as5916_54xm_sfp5, as5916_54xm_sfp6, as5916_54xm_sfp7, as5916_54xm_sfp8, +as5916_54xm_sfp9, as5916_54xm_sfp10, as5916_54xm_sfp11, as5916_54xm_sfp12, as5916_54xm_sfp13, as5916_54xm_sfp14, as5916_54xm_sfp15, as5916_54xm_sfp16, +as5916_54xm_sfp17, as5916_54xm_sfp18, as5916_54xm_sfp19, as5916_54xm_sfp20, as5916_54xm_sfp21, as5916_54xm_sfp22, as5916_54xm_sfp23, as5916_54xm_sfp24, +as5916_54xm_sfp25, as5916_54xm_sfp26, as5916_54xm_sfp27, as5916_54xm_sfp28, as5916_54xm_sfp29, as5916_54xm_sfp30, as5916_54xm_sfp31, as5916_54xm_sfp32, +as5916_54xm_sfp33, as5916_54xm_sfp34, as5916_54xm_sfp35, as5916_54xm_sfp36, as5916_54xm_sfp37, as5916_54xm_sfp38, as5916_54xm_sfp39, as5916_54xm_sfp40, +as5916_54xm_sfp41, as5916_54xm_sfp42, as5916_54xm_sfp43, as5916_54xm_sfp44, as5916_54xm_sfp45, as5916_54xm_sfp46, as5916_54xm_sfp47, as5916_54xm_sfp48, +as5916_54xm_sfp49, as5916_54xm_sfp50, as5916_54xm_sfp51, as5916_54xm_sfp52, as5916_54xm_sfp53, as5916_54xm_sfp54 +}; + +static const struct i2c_device_id sfp_device_id[] = { +{ "as5916_54xm_sfp1", as5916_54xm_sfp1 }, { "as5916_54xm_sfp2", as5916_54xm_sfp2 }, { "as5916_54xm_sfp3", as5916_54xm_sfp3 }, { "as5916_54xm_sfp4", as5916_54xm_sfp4 }, +{ "as5916_54xm_sfp5", as5916_54xm_sfp5 }, { "as5916_54xm_sfp6", as5916_54xm_sfp6 }, { "as5916_54xm_sfp7", as5916_54xm_sfp7 }, { "as5916_54xm_sfp8", as5916_54xm_sfp8 }, +{ "as5916_54xm_sfp9", as5916_54xm_sfp9 }, { "as5916_54xm_sfp10", as5916_54xm_sfp10 }, { "as5916_54xm_sfp11", as5916_54xm_sfp11 }, { "as5916_54xm_sfp12", as5916_54xm_sfp12 }, +{ "as5916_54xm_sfp13", as5916_54xm_sfp13 }, { "as5916_54xm_sfp14", as5916_54xm_sfp14 }, { "as5916_54xm_sfp15", as5916_54xm_sfp15 }, { "as5916_54xm_sfp16", as5916_54xm_sfp16 }, +{ "as5916_54xm_sfp17", as5916_54xm_sfp17 }, { "as5916_54xm_sfp18", as5916_54xm_sfp18 }, { "as5916_54xm_sfp19", as5916_54xm_sfp19 }, { "as5916_54xm_sfp20", as5916_54xm_sfp20 }, +{ "as5916_54xm_sfp21", as5916_54xm_sfp21 }, { "as5916_54xm_sfp22", as5916_54xm_sfp22 }, { "as5916_54xm_sfp23", as5916_54xm_sfp23 }, { "as5916_54xm_sfp24", as5916_54xm_sfp24 }, +{ "as5916_54xm_sfp25", as5916_54xm_sfp25 }, { "as5916_54xm_sfp26", as5916_54xm_sfp26 }, { "as5916_54xm_sfp27", as5916_54xm_sfp27 }, { "as5916_54xm_sfp28", as5916_54xm_sfp28 }, +{ "as5916_54xm_sfp29", as5916_54xm_sfp29 }, { "as5916_54xm_sfp30", as5916_54xm_sfp30 }, { "as5916_54xm_sfp31", as5916_54xm_sfp31 }, { "as5916_54xm_sfp32", as5916_54xm_sfp32 }, +{ "as5916_54xm_sfp33", as5916_54xm_sfp33 }, { "as5916_54xm_sfp34", as5916_54xm_sfp34 }, { "as5916_54xm_sfp35", as5916_54xm_sfp35 }, { "as5916_54xm_sfp36", as5916_54xm_sfp36 }, +{ "as5916_54xm_sfp37", as5916_54xm_sfp37 }, { "as5916_54xm_sfp38", as5916_54xm_sfp38 }, { "as5916_54xm_sfp39", as5916_54xm_sfp39 }, { "as5916_54xm_sfp40", as5916_54xm_sfp40 }, +{ "as5916_54xm_sfp41", as5916_54xm_sfp41 }, { "as5916_54xm_sfp42", as5916_54xm_sfp42 }, { "as5916_54xm_sfp43", as5916_54xm_sfp43 }, { "as5916_54xm_sfp44", as5916_54xm_sfp44 }, +{ "as5916_54xm_sfp45", as5916_54xm_sfp45 }, { "as5916_54xm_sfp46", as5916_54xm_sfp46 }, { "as5916_54xm_sfp47", as5916_54xm_sfp47 }, { "as5916_54xm_sfp48", as5916_54xm_sfp48 }, +{ "as5916_54xm_sfp49", as5916_54xm_sfp49 }, { "as5916_54xm_sfp50", as5916_54xm_sfp50 }, { "as5916_54xm_sfp51", as5916_54xm_sfp51 }, { "as5916_54xm_sfp52", as5916_54xm_sfp52 }, +{ "as5916_54xm_sfp53", as5916_54xm_sfp53 }, { "as5916_54xm_sfp54", as5916_54xm_sfp54 }, +{ /* LIST END */ } +}; +MODULE_DEVICE_TABLE(i2c, sfp_device_id); +/* Platform dependent --- */ + +/* + * list of valid port types + * note OOM_PORT_TYPE_NOT_PRESENT to indicate no + * module is present in this port + */ +typedef enum oom_driver_port_type_e { + OOM_DRIVER_PORT_TYPE_INVALID, + OOM_DRIVER_PORT_TYPE_NOT_PRESENT, + OOM_DRIVER_PORT_TYPE_SFP, + OOM_DRIVER_PORT_TYPE_SFP_PLUS, + OOM_DRIVER_PORT_TYPE_QSFP, + OOM_DRIVER_PORT_TYPE_QSFP_PLUS, + OOM_DRIVER_PORT_TYPE_QSFP28 +} oom_driver_port_type_t; + +enum driver_type_e { + DRIVER_TYPE_SFP_MSA, + DRIVER_TYPE_SFP_DDM, + DRIVER_TYPE_QSFP +}; + +/* Each client has this additional data + */ +struct eeprom_data { + char valid; /* !=0 if registers are valid */ + unsigned long last_updated; /* In jiffies */ + struct bin_attribute bin; /* eeprom data */ +}; + +struct sfp_msa_data { + char valid; /* !=0 if registers are valid */ + unsigned long last_updated; /* In jiffies */ + u64 status[6]; /* bit0:port0, bit1:port1 and so on */ + /* index 0 => tx_fail + 1 => tx_disable + 2 => rx_loss + 3 => device id + 4 => 10G Ethernet Compliance Codes + to distinguish SFP or SFP+ + 5 => DIAGNOSTIC MONITORING TYPE */ + struct eeprom_data eeprom; +}; + +struct sfp_ddm_data { + struct eeprom_data eeprom; +}; + +struct qsfp_data { + char valid; /* !=0 if registers are valid */ + unsigned long last_updated; /* In jiffies */ + u8 status[3]; /* bit0:port0, bit1:port1 and so on */ + /* index 0 => tx_fail + 1 => tx_disable + 2 => rx_loss */ + + u8 device_id; + struct eeprom_data eeprom; +}; + +struct sfp_port_data { + struct mutex update_lock; + enum driver_type_e driver_type; + int port; /* CPLD port index */ + oom_driver_port_type_t port_type; + u64 present; /* present status, bit0:port0, bit1:port1 and so on */ + + struct sfp_msa_data *msa; + struct sfp_ddm_data *ddm; + struct qsfp_data *qsfp; + + struct i2c_client *client; +}; + +static ssize_t show_port_number(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + return sprintf(buf, "%d\n", CPLD_PORT_TO_FRONT_PORT(data->port)); +} + +/* Platform dependent +++ */ +static struct sfp_port_data *sfp_update_present(struct i2c_client *client) +{ + int i = 0, j = 0, status = -1; + u8 reg; + unsigned short cpld_addr; + struct sfp_port_data *data = i2c_get_clientdata(client); + + DEBUG_PRINT("Starting sfp present status update"); + mutex_lock(&data->update_lock); + data->present = 0; + + /* Read present status of port 1~48(SFP port) */ + for (i = 0; i < 2; i++) { + for (j = 0; j < 3; j++) { + cpld_addr = I2C_ADDR_CPLD1 + i*2; + reg = 0x10+j; + status = accton_i2c_cpld_read(cpld_addr, reg); + + if (unlikely(status < 0)) { + dev_dbg(&client->dev, "cpld(0x%x) reg(0x%x) err %d\n", cpld_addr, reg, status); + goto exit; + } + + DEBUG_PRINT("Present status = 0x%lx\r\n", data->present); + data->present |= (u64)status << ((i*24) + (j%3)*8); + } + } + + /* Read present status of port 49-52(QSFP port) */ + cpld_addr = I2C_ADDR_CPLD2; + reg = 0x52; + status = accton_i2c_cpld_read(cpld_addr, reg); + + if (unlikely(status < 0)) { + dev_dbg(&client->dev, "cpld(0x%x) reg(0x%x) err %d\n", cpld_addr, reg, status); + goto exit; + } + else { + data->present |= (u64)(status & 0x3F) << 48; + } + + DEBUG_PRINT("Present status = 0x%lx", data->present); +exit: + mutex_unlock(&data->update_lock); + return (status < 0) ? ERR_PTR(status) : data; +} + +static struct sfp_port_data* sfp_update_tx_rx_status(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + int i = 0, j = 0; + int status = -1; + u8 tx_rx_regs[] = {0x14, 0x16, 0x18, 0x20, 0x22, 0x24, 0x30, 0x32, 0x34}; + + if (time_before(jiffies, data->msa->last_updated + HZ + HZ / 2) && data->msa->valid) { + return data; + } + + DEBUG_PRINT("Starting as5916_54xm sfp tx rx status update"); + mutex_lock(&data->update_lock); + data->msa->valid = 0; + memset(data->msa->status, 0, sizeof(data->msa->status)); + + /* Read status of port 1~48(SFP port) */ + for (i = 0; i < 2; i++) { + for (j = 0; j < ARRAY_SIZE(tx_rx_regs); j++) { + unsigned short cpld_addr = I2C_ADDR_CPLD1 + i*2; + + status = accton_i2c_cpld_read(cpld_addr, tx_rx_regs[j]); + if (unlikely(status < 0)) { + dev_dbg(&client->dev, "cpld(0x%x) reg(0x%x) err %d\n", cpld_addr, tx_rx_regs[i], status); + goto exit; + } + + data->msa->status[j/3] |= (u64)status << ((i*24) + (j%3)*8); + } + } + + data->msa->valid = 1; + data->msa->last_updated = jiffies; + +exit: + mutex_unlock(&data->update_lock); + return (status < 0) ? ERR_PTR(status) : data; +} + +static ssize_t sfp_set_tx_disable(struct device *dev, struct device_attribute *da, + const char *buf, size_t count) +{ + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + unsigned short cpld_addr = 0; + u8 cpld_reg = 0, cpld_val = 0, cpld_bit = 0; + long disable; + int error; + u8 tx_disable_regs[] = {0x20, 0x22, 0x24}; + + if (data->driver_type == DRIVER_TYPE_QSFP) { + return qsfp_set_tx_disable(dev, da, buf, count); + } + + error = kstrtol(buf, 10, &disable); + if (error) { + return error; + } + + mutex_lock(&data->update_lock); + + if(data->port < 24) { + cpld_addr = I2C_ADDR_CPLD1; + cpld_reg = tx_disable_regs[data->port / 8]; + cpld_bit = 1 << (data->port % 8); + } + else { /* port 24 ~ 48 */ + cpld_addr = I2C_ADDR_CPLD2; + cpld_reg = tx_disable_regs[(data->port - 24) / 8]; + cpld_bit = 1 << (data->port % 8); + } + + /* Read current status */ + cpld_val = accton_i2c_cpld_read(cpld_addr, cpld_reg); + + /* Update tx_disable status */ + if (disable) { + data->msa->status[1] |= BIT_INDEX(data->port); + cpld_val |= cpld_bit; + } + else { + data->msa->status[1] &= ~BIT_INDEX(data->port); + cpld_val &= ~cpld_bit; + } + + accton_i2c_cpld_write(cpld_addr, cpld_reg, cpld_val); + mutex_unlock(&data->update_lock); + return count; +} + +static int sfp_is_port_present(struct i2c_client *client, int port) +{ + struct sfp_port_data *data = i2c_get_clientdata(client); + + data = sfp_update_present(client); + if (IS_ERR(data)) { + return PTR_ERR(data); + } + + return !(data->present & BIT_INDEX(data->port)); /* Platform dependent */ +} + +static ssize_t show_present(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); + struct i2c_client *client = to_i2c_client(dev); + + if (PRESENT_ALL == attr->index) { + int i; + u8 values[7] = {0}; + struct sfp_port_data *data = sfp_update_present(client); + + if (IS_ERR(data)) { + return PTR_ERR(data); + } + + for (i = 0; i < ARRAY_SIZE(values); i++) { + values[i] = ~(u8)(data->present >> (i * 8)); + } + + /* Return values 1 -> 54 in order */ + return sprintf(buf, "%.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", + values[0], values[1], values[2], + values[3], values[4], values[5], + values[6] & 0x3F); + } + else { + struct sfp_port_data *data = i2c_get_clientdata(client); + int present = sfp_is_port_present(client, data->port); + + if (IS_ERR_VALUE(present)) { + return present; + } + + /* PRESENT */ + return sprintf(buf, "%d\n", present); + } +} +/* Platform dependent --- */ + +static struct sfp_port_data *sfp_update_port_type(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + u8 buf = 0; + int status; + + mutex_lock(&data->update_lock); + + switch (data->driver_type) { + case DRIVER_TYPE_SFP_MSA: + { + status = sfp_eeprom_read(client, SFF8024_PHYSICAL_DEVICE_ID_ADDR, &buf, sizeof(buf)); + if (unlikely(status < 0)) { + data->port_type = OOM_DRIVER_PORT_TYPE_INVALID; + break; + } + + if (buf != SFF8024_DEVICE_ID_SFP) { + data->port_type = OOM_DRIVER_PORT_TYPE_INVALID; + break; + } + + status = sfp_eeprom_read(client, SFF8472_10G_ETH_COMPLIANCE_ADDR, &buf, sizeof(buf)); + if (unlikely(status < 0)) { + data->port_type = OOM_DRIVER_PORT_TYPE_INVALID; + break; + } + + DEBUG_PRINT("sfp port type (0x3) data = (0x%x)", buf); + data->port_type = buf & SFF8472_10G_BASE_MASK ? OOM_DRIVER_PORT_TYPE_SFP_PLUS : OOM_DRIVER_PORT_TYPE_SFP; + break; + } + case DRIVER_TYPE_QSFP: + { + status = sfp_eeprom_read(client, SFF8024_PHYSICAL_DEVICE_ID_ADDR, &buf, sizeof(buf)); + if (unlikely(status < 0)) { + data->port_type = OOM_DRIVER_PORT_TYPE_INVALID; + break; + } + + DEBUG_PRINT("qsfp port type (0x0) buf = (0x%x)", buf); + switch (buf) { + case SFF8024_DEVICE_ID_QSFP: + data->port_type = OOM_DRIVER_PORT_TYPE_QSFP; + break; + case SFF8024_DEVICE_ID_QSFP_PLUS: + data->port_type = OOM_DRIVER_PORT_TYPE_QSFP_PLUS; + break; + case SFF8024_DEVICE_ID_QSFP28: + data->port_type = OOM_DRIVER_PORT_TYPE_QSFP_PLUS; + break; + default: + data->port_type = OOM_DRIVER_PORT_TYPE_INVALID; + break; + } + + break; + } + default: + break; + } + + mutex_unlock(&data->update_lock); + return data; +} + +static ssize_t show_port_type(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + int present = sfp_is_port_present(client, data->port); + + if (IS_ERR_VALUE(present)) { + return present; + } + + if (!present) { + return sprintf(buf, "%d\n", OOM_DRIVER_PORT_TYPE_NOT_PRESENT); + } + + sfp_update_port_type(dev); + return sprintf(buf, "%d\n", data->port_type); +} + +static struct sfp_port_data *qsfp_update_tx_rx_status(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + int i, status = -1; + u8 buf = 0; + u8 reg[] = {SFF8436_TX_FAULT_ADDR, SFF8436_TX_DISABLE_ADDR, SFF8436_RX_LOS_ADDR}; + + if (time_before(jiffies, data->qsfp->last_updated + HZ + HZ / 2) && data->qsfp->valid) { + return data; + } + + DEBUG_PRINT("Starting sfp tx rx status update"); + mutex_lock(&data->update_lock); + data->qsfp->valid = 0; + memset(data->qsfp->status, 0, sizeof(data->qsfp->status)); + + /* Notify device to update tx fault/ tx disable/ rx los status */ + for (i = 0; i < ARRAY_SIZE(reg); i++) { + status = sfp_eeprom_read(client, reg[i], &buf, sizeof(buf)); + if (unlikely(status < 0)) { + goto exit; + } + } + msleep(200); + + /* Read actual tx fault/ tx disable/ rx los status */ + for (i = 0; i < ARRAY_SIZE(reg); i++) { + status = sfp_eeprom_read(client, reg[i], &buf, sizeof(buf)); + if (unlikely(status < 0)) { + goto exit; + } + + DEBUG_PRINT("qsfp reg(0x%x) status = (0x%x)", reg[i], data->qsfp->status[i]); + data->qsfp->status[i] = (buf & 0xF); + } + + data->qsfp->valid = 1; + data->qsfp->last_updated = jiffies; + +exit: + mutex_unlock(&data->update_lock); + return (status < 0) ? ERR_PTR(status) : data; +} + +static ssize_t qsfp_show_tx_rx_status(struct device *dev, struct device_attribute *da, + char *buf) +{ + int present; + u8 val = 0; + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + + present = sfp_is_port_present(client, data->port); + if (IS_ERR_VALUE(present)) { + return present; + } + + if (present == 0) { + /* port is not present */ + return -ENXIO; + } + + data = qsfp_update_tx_rx_status(dev); + if (IS_ERR(data)) { + return PTR_ERR(data); + } + + switch (attr->index) { + case TX_FAULT: + val = !!(data->qsfp->status[2] & 0xF); + break; + case TX_FAULT1: + case TX_FAULT2: + case TX_FAULT3: + case TX_FAULT4: + val = !!(data->qsfp->status[2] & BIT_INDEX(attr->index - TX_FAULT1)); + break; + case TX_DISABLE: + val = data->qsfp->status[1] & 0xF; + break; + case TX_DISABLE1: + case TX_DISABLE2: + case TX_DISABLE3: + case TX_DISABLE4: + val = !!(data->qsfp->status[1] & BIT_INDEX(attr->index - TX_DISABLE1)); + break; + case RX_LOS: + val = !!(data->qsfp->status[0] & 0xF); + break; + case RX_LOS1: + case RX_LOS2: + case RX_LOS3: + case RX_LOS4: + val = !!(data->qsfp->status[0] & BIT_INDEX(attr->index - RX_LOS1)); + break; + default: + break; + } + + return sprintf(buf, "%d\n", val); +} + +static ssize_t qsfp_set_tx_disable(struct device *dev, struct device_attribute *da, + const char *buf, size_t count) +{ + long disable; + int status; + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + + status = sfp_is_port_present(client, data->port); + if (IS_ERR_VALUE(status)) { + return status; + } + + if (!status) { + /* port is not present */ + return -ENXIO; + } + + status = kstrtol(buf, 10, &disable); + if (status) { + return status; + } + + data = qsfp_update_tx_rx_status(dev); + if (IS_ERR(data)) { + return PTR_ERR(data); + } + + mutex_lock(&data->update_lock); + + if (attr->index == TX_DISABLE) { + data->qsfp->status[1] = disable & 0xF; + } + else {/* TX_DISABLE1 ~ TX_DISABLE4*/ + if (disable) { + data->qsfp->status[1] |= (1 << (attr->index - TX_DISABLE1)); + } + else { + data->qsfp->status[1] &= ~(1 << (attr->index - TX_DISABLE1)); + } + } + + DEBUG_PRINT("index = (%d), status = (0x%x)", attr->index, data->qsfp->status[1]); + status = sfp_eeprom_write(data->client, SFF8436_TX_DISABLE_ADDR, &data->qsfp->status[1], sizeof(data->qsfp->status[1])); + if (unlikely(status < 0)) { + count = status; + } + + mutex_unlock(&data->update_lock); + return count; +} + +static ssize_t sfp_show_ddm_implemented(struct device *dev, struct device_attribute *da, + char *buf) +{ + int status; + char ddm; + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + + status = sfp_is_port_present(client, data->port); + if (IS_ERR_VALUE(status)) { + return status; + } + + if (status == 0) { + /* port is not present */ + return -ENODEV; + } + + status = sfp_eeprom_read(client, SFF8472_DIAG_MON_TYPE_ADDR, &ddm, sizeof(ddm)); + if (unlikely(status < 0)) { + return status; + } + + return sprintf(buf, "%d\n", !!(ddm & SFF8472_DIAG_MON_TYPE_DDM_MASK)); +} + +/* Platform dependent +++ */ +static ssize_t sfp_show_tx_rx_status(struct device *dev, struct device_attribute *da, + char *buf) +{ + u8 val = 0, index = 0; + struct i2c_client *client = to_i2c_client(dev); + struct sfp_port_data *data = i2c_get_clientdata(client); + struct sensor_device_attribute *attr = to_sensor_dev_attr(da); + + if (data->driver_type == DRIVER_TYPE_QSFP) { + return qsfp_show_tx_rx_status(dev, da, buf); + } + + data = sfp_update_tx_rx_status(dev); + if (IS_ERR(data)) { + return PTR_ERR(data); + } + + if(attr->index == RX_LOS_ALL) { + int i = 0; + u8 values[6] = {0}; + + for (i = 0; i < ARRAY_SIZE(values); i++) { + values[i] = (u8)(data->msa->status[2] >> (i * 8)); + } + + /** Return values 1 -> 48 in order */ + return sprintf(buf, "%.2x %.2x %.2x %.2x %.2x %.2x\n", + values[0], values[1], values[2], + values[3], values[4], values[5]); + } + + switch (attr->index) { + case TX_FAULT: + index = 0; + break; + case TX_DISABLE: + index = 1; + break; + case RX_LOS: + index = 2; + break; + default: + return 0; + } + + val = !!(data->msa->status[index] & BIT_INDEX(data->port)); + return sprintf(buf, "%d\n", val); +} +/* Platform dependent --- */ +static ssize_t sfp_eeprom_write(struct i2c_client *client, u8 command, const char *data, + int data_len) +{ +#if USE_I2C_BLOCK_READ + int status, retry = I2C_RW_RETRY_COUNT; + + if (data_len > I2C_SMBUS_BLOCK_MAX) { + data_len = I2C_SMBUS_BLOCK_MAX; + } + + while (retry) { + status = i2c_smbus_write_i2c_block_data(client, command, data_len, data); + if (unlikely(status < 0)) { + msleep(I2C_RW_RETRY_INTERVAL); + retry--; + continue; + } + + break; + } + + if (unlikely(status < 0)) { + return status; + } + + return data_len; +#else + int status, retry = I2C_RW_RETRY_COUNT; + + while (retry) { + status = i2c_smbus_write_byte_data(client, command, *data); + if (unlikely(status < 0)) { + msleep(I2C_RW_RETRY_INTERVAL); + retry--; + continue; + } + + break; + } + + if (unlikely(status < 0)) { + return status; + } + + return 1; +#endif + + +} + +static ssize_t sfp_port_write(struct sfp_port_data *data, + const char *buf, loff_t off, size_t count) +{ + ssize_t retval = 0; + + if (unlikely(!count)) { + return count; + } + + /* + * Write data to chip, protecting against concurrent updates + * from this host, but not from other I2C masters. + */ + mutex_lock(&data->update_lock); + + while (count) { + ssize_t status; + + status = sfp_eeprom_write(data->client, off, buf, count); + if (status <= 0) { + if (retval == 0) { + retval = status; + } + break; + } + buf += status; + off += status; + count -= status; + retval += status; + } + + mutex_unlock(&data->update_lock); + return retval; +} + + +static ssize_t sfp_bin_write(struct file *filp, struct kobject *kobj, + struct bin_attribute *attr, + char *buf, loff_t off, size_t count) +{ + int present; + struct sfp_port_data *data; + DEBUG_PRINT("%s(%d) offset = (%d), count = (%d)", off, count); + data = dev_get_drvdata(container_of(kobj, struct device, kobj)); + + present = sfp_is_port_present(data->client, data->port); + if (IS_ERR_VALUE(present)) { + return present; + } + + if (present == 0) { + /* port is not present */ + return -ENODEV; + } + + return sfp_port_write(data, buf, off, count); +} + +static ssize_t sfp_eeprom_read(struct i2c_client *client, u8 command, u8 *data, + int data_len) +{ +#if USE_I2C_BLOCK_READ + int status, retry = I2C_RW_RETRY_COUNT; + + if (data_len > I2C_SMBUS_BLOCK_MAX) { + data_len = I2C_SMBUS_BLOCK_MAX; + } + + while (retry) { + status = i2c_smbus_read_i2c_block_data(client, command, data_len, data); + if (unlikely(status < 0)) { + msleep(I2C_RW_RETRY_INTERVAL); + retry--; + continue; + } + + break; + } + + if (unlikely(status < 0)) { + goto abort; + } + if (unlikely(status != data_len)) { + status = -EIO; + goto abort; + } + + //result = data_len; + +abort: + return status; +#else + int status, retry = I2C_RW_RETRY_COUNT; + + while (retry) { + status = i2c_smbus_read_byte_data(client, command); + if (unlikely(status < 0)) { + msleep(I2C_RW_RETRY_INTERVAL); + retry--; + continue; + } + + break; + } + + if (unlikely(status < 0)) { + dev_dbg(&client->dev, "sfp read byte data failed, command(0x%2x), data(0x%2x)\r\n", command, status); + goto abort; + } + + *data = (u8)status; + status = 1; + +abort: + return status; +#endif +} + +static ssize_t sfp_port_read(struct sfp_port_data *data, + char *buf, loff_t off, size_t count) +{ + ssize_t retval = 0; + + if (unlikely(!count)) { + DEBUG_PRINT("Count = 0, return"); + return count; + } + + /* + * Read data from chip, protecting against concurrent updates + * from this host, but not from other I2C masters. + */ + mutex_lock(&data->update_lock); + + while (count) { + ssize_t status; + + status = sfp_eeprom_read(data->client, off, buf, count); + if (status <= 0) { + if (retval == 0) { + retval = status; + } + break; + } + + buf += status; + off += status; + count -= status; + retval += status; + } + + mutex_unlock(&data->update_lock); + return retval; + +} + +static ssize_t sfp_bin_read(struct file *filp, struct kobject *kobj, + struct bin_attribute *attr, + char *buf, loff_t off, size_t count) +{ + int present; + struct sfp_port_data *data; + DEBUG_PRINT("offset = (%d), count = (%d)", off, count); + data = dev_get_drvdata(container_of(kobj, struct device, kobj)); + + present = sfp_is_port_present(data->client, data->port); + if (IS_ERR_VALUE(present)) { + return present; + } + + if (present == 0) { + /* port is not present */ + return -ENODEV; + } + + return sfp_port_read(data, buf, off, count); +} + +static int sfp_sysfs_eeprom_init(struct kobject *kobj, struct bin_attribute *eeprom) +{ + int err; + + sysfs_bin_attr_init(eeprom); + eeprom->attr.name = EEPROM_NAME; + eeprom->attr.mode = S_IWUSR | S_IRUGO; + eeprom->read = sfp_bin_read; + eeprom->write = sfp_bin_write; + eeprom->size = EEPROM_SIZE; + + /* Create eeprom file */ + err = sysfs_create_bin_file(kobj, eeprom); + if (err) { + return err; + } + + return 0; +} + +static int sfp_sysfs_eeprom_cleanup(struct kobject *kobj, struct bin_attribute *eeprom) +{ + sysfs_remove_bin_file(kobj, eeprom); + return 0; +} + +static const struct attribute_group sfp_msa_group = { + .attrs = sfp_msa_attributes, +}; + +static int sfp_i2c_check_functionality(struct i2c_client *client) +{ +#if USE_I2C_BLOCK_READ + return i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK); +#else + return i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA); +#endif +} + +static int sfp_msa_probe(struct i2c_client *client, const struct i2c_device_id *dev_id, + struct sfp_msa_data **data) +{ + int status; + struct sfp_msa_data *msa; + + if (!sfp_i2c_check_functionality(client)) { + status = -EIO; + goto exit; + } + + msa = kzalloc(sizeof(struct sfp_msa_data), GFP_KERNEL); + if (!msa) { + status = -ENOMEM; + goto exit; + } + + /* Register sysfs hooks */ + status = sysfs_create_group(&client->dev.kobj, &sfp_msa_group); + if (status) { + goto exit_free; + } + + /* init eeprom */ + status = sfp_sysfs_eeprom_init(&client->dev.kobj, &msa->eeprom.bin); + if (status) { + goto exit_remove; + } + + *data = msa; + dev_info(&client->dev, "sfp msa '%s'\n", client->name); + + return 0; + +exit_remove: + sysfs_remove_group(&client->dev.kobj, &sfp_msa_group); +exit_free: + kfree(msa); +exit: + + return status; +} + +static const struct attribute_group sfp_ddm_group = { + .attrs = sfp_ddm_attributes, +}; + +static int sfp_ddm_probe(struct i2c_client *client, const struct i2c_device_id *dev_id, + struct sfp_ddm_data **data) +{ + int status; + struct sfp_ddm_data *ddm; + + if (!sfp_i2c_check_functionality(client)) { + status = -EIO; + goto exit; + } + + ddm = kzalloc(sizeof(struct sfp_ddm_data), GFP_KERNEL); + if (!ddm) { + status = -ENOMEM; + goto exit; + } + + /* Register sysfs hooks */ + status = sysfs_create_group(&client->dev.kobj, &sfp_ddm_group); + if (status) { + goto exit_free; + } + + /* init eeprom */ + status = sfp_sysfs_eeprom_init(&client->dev.kobj, &ddm->eeprom.bin); + if (status) { + goto exit_remove; + } + + *data = ddm; + dev_info(&client->dev, "sfp ddm '%s'\n", client->name); + + return 0; + +exit_remove: + sysfs_remove_group(&client->dev.kobj, &sfp_ddm_group); +exit_free: + kfree(ddm); +exit: + + return status; +} + +static const struct attribute_group qsfp_group = { + .attrs = qsfp_attributes, +}; + +static int qsfp_probe(struct i2c_client *client, const struct i2c_device_id *dev_id, + struct qsfp_data **data) +{ + int status; + struct qsfp_data *qsfp; + + if (!sfp_i2c_check_functionality(client)) { + status = -EIO; + goto exit; + } + + qsfp = kzalloc(sizeof(struct qsfp_data), GFP_KERNEL); + if (!qsfp) { + status = -ENOMEM; + goto exit; + } + + /* Register sysfs hooks */ + status = sysfs_create_group(&client->dev.kobj, &qsfp_group); + if (status) { + goto exit_free; + } + + /* init eeprom */ + status = sfp_sysfs_eeprom_init(&client->dev.kobj, &qsfp->eeprom.bin); + if (status) { + goto exit_remove; + } + + *data = qsfp; + dev_info(&client->dev, "qsfp '%s'\n", client->name); + + return 0; + +exit_remove: + sysfs_remove_group(&client->dev.kobj, &qsfp_group); +exit_free: + kfree(qsfp); +exit: + + return status; +} + +/* Platform dependent +++ */ +static int sfp_device_probe(struct i2c_client *client, + const struct i2c_device_id *dev_id) +{ + struct sfp_port_data *data = NULL; + + data = kzalloc(sizeof(struct sfp_port_data), GFP_KERNEL); + if (!data) { + return -ENOMEM; + } + + i2c_set_clientdata(client, data); + mutex_init(&data->update_lock); + data->port = dev_id->driver_data; + data->client = client; + + if (dev_id->driver_data >= as5916_54xm_sfp1 && dev_id->driver_data <= as5916_54xm_sfp48) { + if (client->addr == SFP_EEPROM_A0_I2C_ADDR) { + data->driver_type = DRIVER_TYPE_SFP_MSA; + return sfp_msa_probe(client, dev_id, &data->msa); + } + else if (client->addr == SFP_EEPROM_A2_I2C_ADDR) { + data->driver_type = DRIVER_TYPE_SFP_DDM; + return sfp_ddm_probe(client, dev_id, &data->ddm); + } + } + else { /* as5916_54xm_sfp49 ~ as5916_54xm_sfp54 */ + if (client->addr == SFP_EEPROM_A0_I2C_ADDR) { + data->driver_type = DRIVER_TYPE_QSFP; + return qsfp_probe(client, dev_id, &data->qsfp); + } + } + + return -ENODEV; +} +/* Platform dependent --- */ + +static int sfp_msa_remove(struct i2c_client *client, struct sfp_msa_data *data) +{ + sfp_sysfs_eeprom_cleanup(&client->dev.kobj, &data->eeprom.bin); + sysfs_remove_group(&client->dev.kobj, &sfp_msa_group); + kfree(data); + return 0; +} + +static int sfp_ddm_remove(struct i2c_client *client, struct sfp_ddm_data *data) +{ + sfp_sysfs_eeprom_cleanup(&client->dev.kobj, &data->eeprom.bin); + sysfs_remove_group(&client->dev.kobj, &sfp_ddm_group); + kfree(data); + return 0; +} + +static int qfp_remove(struct i2c_client *client, struct qsfp_data *data) +{ + sfp_sysfs_eeprom_cleanup(&client->dev.kobj, &data->eeprom.bin); + sysfs_remove_group(&client->dev.kobj, &qsfp_group); + kfree(data); + return 0; +} + +static int sfp_device_remove(struct i2c_client *client) +{ + struct sfp_port_data *data = i2c_get_clientdata(client); + + switch (data->driver_type) { + case DRIVER_TYPE_SFP_MSA: + return sfp_msa_remove(client, data->msa); + case DRIVER_TYPE_SFP_DDM: + return sfp_ddm_remove(client, data->ddm); + case DRIVER_TYPE_QSFP: + return qfp_remove(client, data->qsfp); + } + + return 0; +} + +/* Addresses scanned + */ +static const unsigned short normal_i2c[] = { I2C_CLIENT_END }; + +static struct i2c_driver sfp_driver = { + .driver = { + .name = DRIVER_NAME, + }, + .probe = sfp_device_probe, + .remove = sfp_device_remove, + .id_table = sfp_device_id, + .address_list = normal_i2c, +}; + +static int __init sfp_init(void) +{ + return i2c_add_driver(&sfp_driver); +} + +static void __exit sfp_exit(void) +{ + i2c_del_driver(&sfp_driver); +} + +MODULE_AUTHOR("Brandon Chuang "); +MODULE_DESCRIPTION("accton as5916_54xm_sfp driver"); +MODULE_LICENSE("GPL"); + +late_initcall(sfp_init); +module_exit(sfp_exit); + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/PKG.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/PKG.yml new file mode 100644 index 00000000..b486e6b2 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/PKG.yml @@ -0,0 +1 @@ +!include $ONL_TEMPLATES/onlp-platform-any.yml PLATFORM=x86-64-accton-as5916-54xm ARCH=amd64 TOOLCHAIN=x86_64-linux-gnu diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/Makefile new file mode 100644 index 00000000..e7437cb2 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/Makefile @@ -0,0 +1,2 @@ +FILTER=src +include $(ONL)/make/subdirs.mk diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/lib/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/lib/Makefile new file mode 100644 index 00000000..332cd2c9 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/lib/Makefile @@ -0,0 +1,45 @@ +############################################################ +# +# +# Copyright 2014 BigSwitch Networks, Inc. +# +# Licensed under the Eclipse Public License, Version 1.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.eclipse.org/legal/epl-v10.html +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the +# License. +# +# +############################################################ +# +# +############################################################ +include $(ONL)/make/config.amd64.mk + +MODULE := libonlp-x86-64-accton-as5916-54xm +include $(BUILDER)/standardinit.mk + +DEPENDMODULES := AIM IOF x86_64_accton_as5916_54xm onlplib +DEPENDMODULE_HEADERS := sff + +include $(BUILDER)/dependmodules.mk + +SHAREDLIB := libonlp-x86-64-accton-as5916-54xm.so +$(SHAREDLIB)_TARGETS := $(ALL_TARGETS) +include $(BUILDER)/so.mk +.DEFAULT_GOAL := $(SHAREDLIB) + +GLOBAL_CFLAGS += -I$(onlp_BASEDIR)/module/inc +GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1 +GLOBAL_CFLAGS += -fPIC +GLOBAL_LINK_LIBS += -lpthread + +include $(BUILDER)/targets.mk + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/onlpdump/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/onlpdump/Makefile new file mode 100644 index 00000000..0f248885 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/onlpdump/Makefile @@ -0,0 +1,46 @@ +############################################################ +# +# +# Copyright 2014 BigSwitch Networks, Inc. +# +# Licensed under the Eclipse Public License, Version 1.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.eclipse.org/legal/epl-v10.html +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the +# License. +# +# +############################################################ +# +# +# +############################################################ +include $(ONL)/make/config.amd64.mk + +.DEFAULT_GOAL := onlpdump + +MODULE := onlpdump +include $(BUILDER)/standardinit.mk + +DEPENDMODULES := AIM IOF onlp x86_64_accton_as5916_54xm onlplib onlp_platform_defaults sff cjson cjson_util timer_wheel OS + +include $(BUILDER)/dependmodules.mk + +BINARY := onlpdump +$(BINARY)_LIBRARIES := $(LIBRARY_TARGETS) +include $(BUILDER)/bin.mk + +GLOBAL_CFLAGS += -DAIM_CONFIG_AIM_MAIN_FUNCTION=onlpdump_main +GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1 +GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MAIN=1 +GLOBAL_LINK_LIBS += -lpthread -lm + +include $(BUILDER)/targets.mk + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/.module new file mode 100644 index 00000000..2d91ae63 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/.module @@ -0,0 +1 @@ +name: x86_64_accton_as5916_54xm diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/Makefile new file mode 100644 index 00000000..d25ba602 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/Makefile @@ -0,0 +1,9 @@ +############################################################################### +# +# +# +############################################################################### +include ../../init.mk +MODULE := x86_64_accton_as5916_54xm +AUTOMODULE := x86_64_accton_as5916_54xm +include $(BUILDER)/definemodule.mk diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/README b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/README new file mode 100644 index 00000000..e6f363b3 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/README @@ -0,0 +1,6 @@ +############################################################################### +# +# x86_64_accton_as5916_54xm README +# +############################################################################### + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/make.mk b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/make.mk new file mode 100644 index 00000000..2c7da55b --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/make.mk @@ -0,0 +1,9 @@ +############################################################################### +# +# x86_64_accton_as5916_54xm Autogeneration +# +############################################################################### +x86_64_accton_as5916_54xm_AUTO_DEFS := module/auto/x86_64_accton_as5916_54xm.yml +x86_64_accton_as5916_54xm_AUTO_DIRS := module/inc/x86_64_accton_as5916_54xm module/src +include $(BUILDER)/auto.mk + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml new file mode 100644 index 00000000..80e0c5ea --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml @@ -0,0 +1,50 @@ +############################################################################### +# +# x86_64_accton_as5916_54xm Autogeneration Definitions. +# +############################################################################### + +cdefs: &cdefs +- x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING: + doc: "Include or exclude logging." + default: 1 +- x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT: + doc: "Default enabled log options." + default: AIM_LOG_OPTIONS_DEFAULT +- x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT: + doc: "Default enabled log bits." + default: AIM_LOG_BITS_DEFAULT +- x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT: + doc: "Default enabled custom log bits." + default: 0 +- x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB: + doc: "Default all porting macros to use the C standard libraries." + default: 1 +- x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS: + doc: "Include standard library headers for stdlib porting macros." + default: x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB +- x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI: + doc: "Include generic uCli support." + default: 0 +- x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION: + doc: "Assume chassis fan direction is the same as the PSU fan direction." + default: 0 + + +definitions: + cdefs: + x86_64_accton_as5916_54xm_CONFIG_HEADER: + defs: *cdefs + basename: x86_64_accton_as5916_54xm_config + + portingmacro: + x86_64_accton_as5916_54xm: + macros: + - malloc + - free + - memset + - memcpy + - strncpy + - vsnprintf + - snprintf + - strlen diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm.x b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm.x new file mode 100644 index 00000000..1f782e3a --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm.x @@ -0,0 +1,14 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +/* <--auto.start.xmacro(ALL).define> */ +/* */ + +/* <--auto.start.xenum(ALL).define> */ +/* */ + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_config.h b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_config.h new file mode 100644 index 00000000..bd0d6786 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_config.h @@ -0,0 +1,137 @@ +/**************************************************************************//** + * + * @file + * @brief x86_64_accton_as5916_54xm Configuration Header + * + * @addtogroup x86_64_accton_as5916_54xm-config + * @{ + * + *****************************************************************************/ +#ifndef __x86_64_accton_as5916_54xm_CONFIG_H__ +#define __x86_64_accton_as5916_54xm_CONFIG_H__ + +#ifdef GLOBAL_INCLUDE_CUSTOM_CONFIG +#include +#endif +#ifdef x86_64_accton_as5916_54xm_INCLUDE_CUSTOM_CONFIG +#include +#endif + +/* */ +#include +/** + * x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING + * + * Include or exclude logging. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING +#define x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING 1 +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT + * + * Default enabled log options. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT +#define x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT AIM_LOG_OPTIONS_DEFAULT +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT + * + * Default enabled log bits. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT +#define x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT AIM_LOG_BITS_DEFAULT +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT + * + * Default enabled custom log bits. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT +#define x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT 0 +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB + * + * Default all porting macros to use the C standard libraries. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB +#define x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB 1 +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS + * + * Include standard library headers for stdlib porting macros. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS +#define x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI + * + * Include generic uCli support. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI +#define x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI 0 +#endif + +/** + * x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION + * + * Assume chassis fan direction is the same as the PSU fan direction. */ + + +#ifndef x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION +#define x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION 0 +#endif + + + +/** + * All compile time options can be queried or displayed + */ + +/** Configuration settings structure. */ +typedef struct x86_64_accton_as5916_54xm_config_settings_s { + /** name */ + const char* name; + /** value */ + const char* value; +} x86_64_accton_as5916_54xm_config_settings_t; + +/** Configuration settings table. */ +/** x86_64_accton_as5916_54xm_config_settings table. */ +extern x86_64_accton_as5916_54xm_config_settings_t x86_64_accton_as5916_54xm_config_settings[]; + +/** + * @brief Lookup a configuration setting. + * @param setting The name of the configuration option to lookup. + */ +const char* x86_64_accton_as5916_54xm_config_lookup(const char* setting); + +/** + * @brief Show the compile-time configuration. + * @param pvs The output stream. + */ +int x86_64_accton_as5916_54xm_config_show(struct aim_pvs_s* pvs); + +/* */ + +#include "x86_64_accton_as5916_54xm_porting.h" + +#endif /* __x86_64_accton_as5916_54xm_CONFIG_H__ */ +/* @} */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_dox.h b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_dox.h new file mode 100644 index 00000000..d56c1130 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_dox.h @@ -0,0 +1,26 @@ +/**************************************************************************//** + * + * x86_64_accton_as5916_54xm Doxygen Header + * + *****************************************************************************/ +#ifndef __x86_64_accton_as5916_54xm_DOX_H__ +#define __x86_64_accton_as5916_54xm_DOX_H__ + +/** + * @defgroup x86_64_accton_as5916_54xm x86_64_accton_as5916_54xm - x86_64_accton_as5916_54xm Description + * + +The documentation overview for this module should go here. + + * + * @{ + * + * @defgroup x86_64_accton_as5916_54xm-x86_64_accton_as5916_54xm Public Interface + * @defgroup x86_64_accton_as5916_54xm-config Compile Time Configuration + * @defgroup x86_64_accton_as5916_54xm-porting Porting Macros + * + * @} + * + */ + +#endif /* __x86_64_accton_as5916_54xm_DOX_H__ */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_porting.h b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_porting.h new file mode 100644 index 00000000..7ae02dc5 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/inc/x86_64_accton_as5916_54xm/x86_64_accton_as5916_54xm_porting.h @@ -0,0 +1,107 @@ +/**************************************************************************//** + * + * @file + * @brief x86_64_accton_as5916_54xm Porting Macros. + * + * @addtogroup x86_64_accton_as5916_54xm-porting + * @{ + * + *****************************************************************************/ +#ifndef __x86_64_accton_as5916_54xm_PORTING_H__ +#define __x86_64_accton_as5916_54xm_PORTING_H__ + + +/* */ +#if x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS == 1 +#include +#include +#include +#include +#include +#endif + +#ifndef x86_64_accton_as5916_54xm_MALLOC + #if defined(GLOBAL_MALLOC) + #define x86_64_accton_as5916_54xm_MALLOC GLOBAL_MALLOC + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_MALLOC malloc + #else + #error The macro x86_64_accton_as5916_54xm_MALLOC is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_FREE + #if defined(GLOBAL_FREE) + #define x86_64_accton_as5916_54xm_FREE GLOBAL_FREE + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_FREE free + #else + #error The macro x86_64_accton_as5916_54xm_FREE is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_MEMSET + #if defined(GLOBAL_MEMSET) + #define x86_64_accton_as5916_54xm_MEMSET GLOBAL_MEMSET + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_MEMSET memset + #else + #error The macro x86_64_accton_as5916_54xm_MEMSET is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_MEMCPY + #if defined(GLOBAL_MEMCPY) + #define x86_64_accton_as5916_54xm_MEMCPY GLOBAL_MEMCPY + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_MEMCPY memcpy + #else + #error The macro x86_64_accton_as5916_54xm_MEMCPY is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_STRNCPY + #if defined(GLOBAL_STRNCPY) + #define x86_64_accton_as5916_54xm_STRNCPY GLOBAL_STRNCPY + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_STRNCPY strncpy + #else + #error The macro x86_64_accton_as5916_54xm_STRNCPY is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_VSNPRINTF + #if defined(GLOBAL_VSNPRINTF) + #define x86_64_accton_as5916_54xm_VSNPRINTF GLOBAL_VSNPRINTF + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_VSNPRINTF vsnprintf + #else + #error The macro x86_64_accton_as5916_54xm_VSNPRINTF is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_SNPRINTF + #if defined(GLOBAL_SNPRINTF) + #define x86_64_accton_as5916_54xm_SNPRINTF GLOBAL_SNPRINTF + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_SNPRINTF snprintf + #else + #error The macro x86_64_accton_as5916_54xm_SNPRINTF is required but cannot be defined. + #endif +#endif + +#ifndef x86_64_accton_as5916_54xm_STRLEN + #if defined(GLOBAL_STRLEN) + #define x86_64_accton_as5916_54xm_STRLEN GLOBAL_STRLEN + #elif x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB == 1 + #define x86_64_accton_as5916_54xm_STRLEN strlen + #else + #error The macro x86_64_accton_as5916_54xm_STRLEN is required but cannot be defined. + #endif +#endif + +/* */ + + +#endif /* __x86_64_accton_as5916_54xm_PORTING_H__ */ +/* @} */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/make.mk b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/make.mk new file mode 100644 index 00000000..684e386e --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/make.mk @@ -0,0 +1,10 @@ +############################################################################### +# +# +# +############################################################################### +THIS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) +x86_64_accton_as5916_54xm_INCLUDES := -I $(THIS_DIR)inc +x86_64_accton_as5916_54xm_INTERNAL_INCLUDES := -I $(THIS_DIR)src +x86_64_accton_as5916_54xm_DEPENDMODULE_ENTRIES := init:x86_64_accton_as5916_54xm ucli:x86_64_accton_as5916_54xm + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/Makefile new file mode 100644 index 00000000..1aa49da8 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/Makefile @@ -0,0 +1,9 @@ +############################################################################### +# +# Local source generation targets. +# +############################################################################### + +ucli: + @../../../../tools/uclihandlers.py x86_64_accton_as5916_54xm_ucli.c + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c new file mode 100644 index 00000000..90f21761 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c @@ -0,0 +1,45 @@ +#include "x86_64_accton_as5916_54xm_int.h" + +#if x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEBUG == 1 + +#include + +static char help__[] = + "Usage: debug [options]\n" + " -c CPLD Versions\n" + " -h Help\n" + ; + +int +x86_64_accton_as5916_54xm_debug_main(int argc, char* argv[]) +{ + int c = 0; + int help = 0; + int rv = 0; + + while( (c = getopt(argc, argv, "ch")) != -1) { + switch(c) + { + case 'c': c = 1; break; + case 'h': help = 1; rv = 0; break; + default: help = 1; rv = 1; break; + } + + } + + if(help || argc == 1) { + printf("%s", help__); + return rv; + } + + if(c) { + printf("Not implemented.\n"); + } + + + return 0; +} + +#endif + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c new file mode 100644 index 00000000..7ff55407 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c @@ -0,0 +1,366 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2014 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * Fan Platform Implementation Defaults. + * + ***********************************************************/ +#include +#include +#include "platform_lib.h" + +#define PSU_PREFIX_PATH "/sys/bus/i2c/devices/" + +enum fan_id { + FAN_1_ON_FAN_BOARD = 1, + FAN_2_ON_FAN_BOARD, + FAN_3_ON_FAN_BOARD, + FAN_4_ON_FAN_BOARD, + FAN_5_ON_FAN_BOARD, + FAN_6_ON_FAN_BOARD, + FAN_1_ON_PSU_1, + FAN_1_ON_PSU_2, +}; + +#define MAX_FAN_SPEED 25500 +#define MAX_PSU_FAN_SPEED 25500 + +#define CHASSIS_FAN_INFO(fid) \ + { \ + { ONLP_FAN_ID_CREATE(FAN_##fid##_ON_FAN_BOARD), "Chassis Fan - "#fid, 0 },\ + 0x0,\ + ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE,\ + 0,\ + 0,\ + ONLP_FAN_MODE_INVALID,\ + } + +#define PSU_FAN_INFO(pid, fid) \ + { \ + { ONLP_FAN_ID_CREATE(FAN_##fid##_ON_PSU_##pid), "PSU "#pid" - Fan "#fid, 0 },\ + 0x0,\ + ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE,\ + 0,\ + 0,\ + ONLP_FAN_MODE_INVALID,\ + } + +/* Static fan information */ +onlp_fan_info_t finfo[] = { + { }, /* Not used */ + CHASSIS_FAN_INFO(1), + CHASSIS_FAN_INFO(2), + CHASSIS_FAN_INFO(3), + CHASSIS_FAN_INFO(4), + CHASSIS_FAN_INFO(5), + CHASSIS_FAN_INFO(6), + PSU_FAN_INFO(1, 1), + PSU_FAN_INFO(2, 1) +}; + +#define VALIDATE(_id) \ + do { \ + if(!ONLP_OID_IS_FAN(_id)) { \ + return ONLP_STATUS_E_INVALID; \ + } \ + } while(0) + +static int +_onlp_fani_info_get_fan(int fid, onlp_fan_info_t* info) +{ + int value, ret; + char path[64] = {0}; + + /* get fan present status + */ + ret = onlp_file_read_int(&value, "%s""fan%d_present", FAN_BOARD_PATH, fid); + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + if (value == 0) { + return ONLP_STATUS_OK; + } + info->status |= ONLP_FAN_STATUS_PRESENT; + + + /* get fan fault status (turn on when any one fails) + */ + ret = onlp_file_read_int(&value, "%s""fan%d_fault", FAN_BOARD_PATH, fid); + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + if (value > 0) { + info->status |= ONLP_FAN_STATUS_FAILED; + } + + + /* get fan direction (both : the same) + */ + ret = onlp_file_read_int(&value, "%s""fan%d_direction", FAN_BOARD_PATH, fid); + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + info->status |= value ? ONLP_FAN_STATUS_F2B : ONLP_FAN_STATUS_B2F; + + + /* get front fan speed + */ + ret = onlp_file_read_int(&value, "%s""fan%d_front_speed_rpm", FAN_BOARD_PATH, fid); + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + info->rpm = value; + + /* get rear fan speed + */ + ret = onlp_file_read_int(&value, "%s""fan%d_rear_speed_rpm", FAN_BOARD_PATH, fid); + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + /* take the min value from front/rear fan speed + */ + if (info->rpm > value) { + info->rpm = value; + } + + /* get speed percentage from rpm + */ + ret = onlp_file_read_int(&value, "%s""fan_max_speed_rpm", FAN_BOARD_PATH); + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + info->percentage = (info->rpm * 100)/value; + + return ONLP_STATUS_OK; +} + +static uint32_t +_onlp_get_fan_direction_on_psu(void) +{ + /* Try to read direction from PSU1. + * If PSU1 is not valid, read from PSU2 + */ + int i = 0; + + for (i = PSU1_ID; i <= PSU2_ID; i++) { + psu_type_t psu_type; + psu_type = get_psu_type(i, NULL, 0); + + if (psu_type == PSU_TYPE_UNKNOWN) { + continue; + } + + if (PSU_TYPE_AC_F2B == psu_type) { + return ONLP_FAN_STATUS_F2B; + } + else { + return ONLP_FAN_STATUS_B2F; + } + } + + return 0; +} + +static int +_onlp_fani_info_get_fan_on_psu(int pid, onlp_fan_info_t* info) +{ + int val = 0; + + info->status |= ONLP_FAN_STATUS_PRESENT; + + /* get fan direction + */ + info->status |= _onlp_get_fan_direction_on_psu(); + + /* get fan fault status + */ + if (psu_ym2651y_pmbus_info_get(pid, "psu_fan1_fault", &val) == ONLP_STATUS_OK) { + info->status |= (val > 0) ? ONLP_FAN_STATUS_FAILED : 0; + } + + /* get fan speed + */ + if (psu_ym2651y_pmbus_info_get(pid, "psu_fan1_speed_rpm", &val) == ONLP_STATUS_OK) { + info->rpm = val; + info->percentage = (info->rpm * 100) / MAX_PSU_FAN_SPEED; + } + + return ONLP_STATUS_OK; +} + +/* + * This function will be called prior to all of onlp_fani_* functions. + */ +int +onlp_fani_init(void) +{ + return ONLP_STATUS_OK; +} + +int +onlp_fani_info_get(onlp_oid_t id, onlp_fan_info_t* info) +{ + int rc = 0; + int fid; + VALIDATE(id); + + fid = ONLP_OID_ID_GET(id); + *info = finfo[fid]; + + switch (fid) + { + case FAN_1_ON_PSU_1: + rc = _onlp_fani_info_get_fan_on_psu(PSU1_ID, info); + break; + case FAN_1_ON_PSU_2: + rc = _onlp_fani_info_get_fan_on_psu(PSU2_ID, info); + break; + case FAN_1_ON_FAN_BOARD: + case FAN_2_ON_FAN_BOARD: + case FAN_3_ON_FAN_BOARD: + case FAN_4_ON_FAN_BOARD: + case FAN_5_ON_FAN_BOARD: + case FAN_6_ON_FAN_BOARD: + rc =_onlp_fani_info_get_fan(fid, info); + break; + default: + rc = ONLP_STATUS_E_INVALID; + break; + } + + return rc; +} + +/* + * This function sets the speed of the given fan in RPM. + * + * This function will only be called if the fan supprots the RPM_SET + * capability. + * + * It is optional if you have no fans at all with this feature. + */ +int +onlp_fani_rpm_set(onlp_oid_t id, int rpm) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + +/* + * This function sets the fan speed of the given OID as a percentage. + * + * This will only be called if the OID has the PERCENTAGE_SET + * capability. + * + * It is optional if you have no fans at all with this feature. + */ +int +onlp_fani_percentage_set(onlp_oid_t id, int p) +{ + int fid; + char *path = NULL; + + VALIDATE(id); + + fid = ONLP_OID_ID_GET(id); + + /* reject p=0 (p=0, stop fan) */ + if (p == 0){ + return ONLP_STATUS_E_INVALID; + } + + printf("[ROY]%s#%d, fid:%d, duty:%d\n", __func__, __LINE__,fid, p); + + + switch (fid) + { + case FAN_1_ON_PSU_1: + return psu_ym2651y_pmbus_info_set(PSU1_ID, "psu_fan1_duty_cycle_percentage", p); + case FAN_1_ON_PSU_2: + return psu_ym2651y_pmbus_info_set(PSU2_ID, "psu_fan1_duty_cycle_percentage", p); + case FAN_1_ON_FAN_BOARD: + case FAN_2_ON_FAN_BOARD: + case FAN_3_ON_FAN_BOARD: + case FAN_4_ON_FAN_BOARD: + case FAN_5_ON_FAN_BOARD: + case FAN_6_ON_FAN_BOARD: + path = FAN_NODE(fan_duty_cycle_percentage); + break; + default: + return ONLP_STATUS_E_INVALID; + } + + if (onlp_file_write_integer(path, p) < 0) { + AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + + +/* + * This function sets the fan speed of the given OID as per + * the predefined ONLP fan speed modes: off, slow, normal, fast, max. + * + * Interpretation of these modes is up to the platform. + * + */ +int +onlp_fani_mode_set(onlp_oid_t id, onlp_fan_mode_t mode) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + +/* + * This function sets the fan direction of the given OID. + * + * This function is only relevant if the fan OID supports both direction + * capabilities. + * + * This function is optional unless the functionality is available. + */ +int +onlp_fani_dir_set(onlp_oid_t id, onlp_fan_dir_t dir) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + +/* + * Generic fan ioctl. Optional. + */ +int +onlp_fani_ioctl(onlp_oid_t id, va_list vargs) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/ledi.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/ledi.c new file mode 100644 index 00000000..480f3570 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/ledi.c @@ -0,0 +1,249 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2013 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include "platform_lib.h" + +#define VALIDATE(_id) \ + do { \ + if(!ONLP_OID_IS_LED(_id)) { \ + return ONLP_STATUS_E_INVALID; \ + } \ + } while(0) + +#define LED_FORMAT "/sys/class/leds/accton_as5916_54xm_led::%s/brightness" + +/* LED related data + */ +enum led_light_mode { /*must be the same with the definition @ kernel driver */ + LED_MODE_OFF = 0, + LED_MODE_GREEN, + LED_MODE_GREEN_BLINK, + LED_MODE_AMBER, + LED_MODE_AMBER_BLINK, + LED_MODE_RED, + LED_MODE_RED_BLINK, + LED_MODE_BLUE, + LED_MODE_BLUE_BLINK, + LED_MODE_AUTO, + LED_MODE_UNKNOWN +}; + +enum onlp_led_id +{ + LED_LOC = 1, + LED_DIAG, + LED_PSU1, + LED_PSU2, + LED_FAN, +}; + +typedef struct led_light_mode_map { + enum onlp_led_id id; + enum led_light_mode driver_led_mode; + enum onlp_led_mode_e onlp_led_mode; +} led_light_mode_map_t; + +led_light_mode_map_t led_map[] = { +{LED_LOC, LED_MODE_OFF, ONLP_LED_MODE_OFF}, +{LED_LOC, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE}, +{LED_DIAG, LED_MODE_OFF, ONLP_LED_MODE_OFF}, +{LED_DIAG, LED_MODE_GREEN, ONLP_LED_MODE_GREEN}, +{LED_DIAG, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE}, +{LED_FAN, LED_MODE_AUTO, ONLP_LED_MODE_AUTO}, +{LED_PSU1, LED_MODE_AUTO, ONLP_LED_MODE_AUTO}, +{LED_PSU2, LED_MODE_AUTO, ONLP_LED_MODE_AUTO} +}; + +static char *leds[] = /* must map with onlp_led_id */ +{ + NULL, + "loc", + "diag", + "psu1", + "psu2", + "fan" +}; + +/* + * Get the information for the given LED OID. + */ +static onlp_led_info_t linfo[] = +{ + { }, /* Not used */ + { + { ONLP_LED_ID_CREATE(LED_LOC), "Chassis LED 1 (LOC LED)", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE, + }, + { + { ONLP_LED_ID_CREATE(LED_DIAG), "Chassis LED 2 (DIAG LED)", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_ORANGE | ONLP_LED_CAPS_GREEN, + }, + { + { ONLP_LED_ID_CREATE(LED_PSU1), "Chassis LED 3 (PSU1 LED)", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_AUTO, + }, + { + { ONLP_LED_ID_CREATE(LED_PSU2), "Chassis LED 4 (PSU2 LED)", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_AUTO, + }, + { + { ONLP_LED_ID_CREATE(LED_FAN), "Chassis LED 5 (FAN LED)", 0 }, + ONLP_LED_STATUS_PRESENT, + ONLP_LED_CAPS_ON_OFF | ONLP_LED_CAPS_AUTO, + }, +}; + +static int driver_to_onlp_led_mode(enum onlp_led_id id, enum led_light_mode driver_led_mode) +{ + int i, nsize = sizeof(led_map)/sizeof(led_map[0]); + + for (i = 0; i < nsize; i++) + { + if (id == led_map[i].id && driver_led_mode == led_map[i].driver_led_mode) + { + return led_map[i].onlp_led_mode; + } + } + + return 0; +} + +static int onlp_to_driver_led_mode(enum onlp_led_id id, onlp_led_mode_t onlp_led_mode) +{ + int i, nsize = sizeof(led_map)/sizeof(led_map[0]); + + for(i = 0; i < nsize; i++) + { + if (id == led_map[i].id && onlp_led_mode == led_map[i].onlp_led_mode) + { + return led_map[i].driver_led_mode; + } + } + + return 0; +} + +/* + * This function will be called prior to any other onlp_ledi_* functions. + */ +int +onlp_ledi_init(void) +{ + /* + * Turn off the LOCATION and DIAG LEDs at startup + */ + onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_LOC), ONLP_LED_MODE_OFF); + onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_DIAG), ONLP_LED_MODE_OFF); + + return ONLP_STATUS_OK; +} + +int +onlp_ledi_info_get(onlp_oid_t id, onlp_led_info_t* info) +{ + int lid, value; + VALIDATE(id); + + lid = ONLP_OID_ID_GET(id); + + /* Set the onlp_oid_hdr_t and capabilities */ + *info = linfo[ONLP_OID_ID_GET(id)]; + + /* Get LED mode */ + if (onlp_file_read_int(&value, LED_FORMAT, leds[lid]) < 0) { + DEBUG_PRINT("Unable to read status from file (%s)", leds[lid]); + return ONLP_STATUS_E_INTERNAL; + } + + info->mode = driver_to_onlp_led_mode(lid, value); + + /* Set the on/off status */ + if (info->mode != ONLP_LED_MODE_OFF) { + info->status |= ONLP_LED_STATUS_ON; + } + + return ONLP_STATUS_OK; +} + +/* + * Turn an LED on or off. + * + * This function will only be called if the LED OID supports the ONOFF + * capability. + * + * What 'on' means in terms of colors or modes for multimode LEDs is + * up to the platform to decide. This is intended as baseline toggle mechanism. + */ +int +onlp_ledi_set(onlp_oid_t id, int on_or_off) +{ + VALIDATE(id); + + if (!on_or_off) { + return onlp_ledi_mode_set(id, ONLP_LED_MODE_OFF); + } + + return ONLP_STATUS_E_UNSUPPORTED; +} + +/* + * This function puts the LED into the given mode. It is a more functional + * interface for multimode LEDs. + * + * Only modes reported in the LED's capabilities will be attempted. + */ +int +onlp_ledi_mode_set(onlp_oid_t id, onlp_led_mode_t mode) +{ + int lid; + char path[64] = {0}; + + VALIDATE(id); + + lid = ONLP_OID_ID_GET(id); + sprintf(path, LED_FORMAT, leds[lid]); + + if (onlp_file_write_integer(path, onlp_to_driver_led_mode(lid , mode)) < 0) { + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + +/* + * Generic LED ioctl interface. + */ +int +onlp_ledi_ioctl(onlp_oid_t id, va_list vargs) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/make.mk b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/make.mk new file mode 100644 index 00000000..36152f2d --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/make.mk @@ -0,0 +1,9 @@ +############################################################################### +# +# +# +############################################################################### + +LIBRARY := x86_64_accton_as5916_54xm +$(LIBRARY)_SUBDIR := $(dir $(lastword $(MAKEFILE_LIST))) +include $(BUILDER)/lib.mk diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c new file mode 100644 index 00000000..b14867bd --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c @@ -0,0 +1,202 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2013 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include +#include +#include "platform_lib.h" + +#define PSU_NODE_MAX_PATH_LEN 64 + +int _onlp_file_write(char *filename, char *buffer, int buf_size, int data_len) +{ + int fd; + int len; + + if ((buffer == NULL) || (buf_size < 0)) { + return -1; + } + + if ((fd = open(filename, O_WRONLY, S_IWUSR)) == -1) { + return -1; + } + + if ((len = write(fd, buffer, buf_size)) < 0) { + close(fd); + return -1; + } + + if ((close(fd) == -1)) { + return -1; + } + + if ((len > buf_size) || (data_len != 0 && len != data_len)) { + return -1; + } + + return 0; +} + +int onlp_file_write_integer(char *filename, int value) +{ + char buf[8] = {0}; + sprintf(buf, "%d", value); + + return _onlp_file_write(filename, buf, (int)strlen(buf), 0); +} + +int onlp_file_read_binary(char *filename, char *buffer, int buf_size, int data_len) +{ + int fd; + int len; + + if ((buffer == NULL) || (buf_size < 0)) { + return -1; + } + + if ((fd = open(filename, O_RDONLY)) == -1) { + return -1; + } + + if ((len = read(fd, buffer, buf_size)) < 0) { + close(fd); + return -1; + } + + if ((close(fd) == -1)) { + return -1; + } + + if ((len > buf_size) || (data_len != 0 && len != data_len)) { + return -1; + } + + return 0; +} + +int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_len) +{ + int ret; + + if (data_len >= buf_size) { + return -1; + } + + ret = onlp_file_read_binary(filename, buffer, buf_size-1, data_len); + + if (ret == 0) { + buffer[buf_size-1] = '\0'; + } + + return ret; +} + +#define I2C_PSU_MODEL_NAME_LEN 9 +#define I2C_PSU_FAN_DIR_LEN 3 + +psu_type_t get_psu_type(int id, char* modelname, int modelname_len) +{ + char *node = NULL; + char model_name[I2C_PSU_MODEL_NAME_LEN + 1] = {0}; + char fan_dir[I2C_PSU_FAN_DIR_LEN + 1] = {0}; + + /* Check AC model name */ + node = (id == PSU1_ID) ? PSU1_AC_HWMON_NODE(psu_model_name) : PSU2_AC_HWMON_NODE(psu_model_name); + + if (onlp_file_read_string(node, model_name, sizeof(model_name), 0) != 0) { + return PSU_TYPE_UNKNOWN; + } + + if (strncmp(model_name, "YM-2651Y", strlen("YM-2651Y")) != 0) { + return PSU_TYPE_UNKNOWN; + } + + if (modelname) { + strncpy(modelname, model_name, modelname_len-1); + } + + node = (id == PSU1_ID) ? PSU1_AC_PMBUS_NODE(psu_fan_dir) : PSU2_AC_PMBUS_NODE(psu_fan_dir); + + if (onlp_file_read_string(node, fan_dir, sizeof(fan_dir), 0) != 0) { + return PSU_TYPE_UNKNOWN; + } + + if (strncmp(fan_dir, "F2B", strlen("F2B")) == 0) { + return PSU_TYPE_AC_F2B; + } + + if (strncmp(fan_dir, "B2F", strlen("B2F")) == 0) { + return PSU_TYPE_AC_B2F; + } + + return PSU_TYPE_UNKNOWN; +} + +int psu_ym2651y_pmbus_info_get(int id, char *node, int *value) +{ + int ret = 0; + char path[PSU_NODE_MAX_PATH_LEN] = {0}; + + *value = 0; + + if (PSU1_ID == id) { + ret = onlp_file_read_int(value, "%s%s", PSU1_AC_PMBUS_PREFIX, node); + } + else { + ret = onlp_file_read_int(value, "%s%s", PSU2_AC_PMBUS_PREFIX, node); + } + + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ret; +} + +int psu_ym2651y_pmbus_info_set(int id, char *node, int value) +{ + char path[PSU_NODE_MAX_PATH_LEN] = {0}; + + switch (id) { + case PSU1_ID: + sprintf(path, "%s%s", PSU1_AC_PMBUS_PREFIX, node); + break; + case PSU2_ID: + sprintf(path, "%s%s", PSU2_AC_PMBUS_PREFIX, node); + break; + default: + return ONLP_STATUS_E_UNSUPPORTED; + }; + + if (onlp_file_write_integer(path, value) < 0) { + AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.h new file mode 100644 index 00000000..adca1597 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.h @@ -0,0 +1,94 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2014 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#ifndef __PLATFORM_LIB_H__ +#define __PLATFORM_LIB_H__ + +#include "x86_64_accton_as5916_54xm_log.h" + +#define CHASSIS_FAN_COUNT 6 +#define CHASSIS_THERMAL_COUNT 5 +#define CHASSIS_PSU_COUNT 2 +#define CHASSIS_LED_COUNT 5 + +#define PSU1_ID 1 +#define PSU2_ID 2 + +#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/18-005b/" +#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/17-0058/" + +#define PSU1_AC_PMBUS_NODE(node) PSU1_AC_PMBUS_PREFIX#node +#define PSU2_AC_PMBUS_NODE(node) PSU2_AC_PMBUS_PREFIX#node + +#define PSU1_AC_HWMON_PREFIX "/sys/bus/i2c/devices/18-0053/" +#define PSU2_AC_HWMON_PREFIX "/sys/bus/i2c/devices/17-0050/" + +#define PSU1_AC_HWMON_NODE(node) PSU1_AC_HWMON_PREFIX#node +#define PSU2_AC_HWMON_NODE(node) PSU2_AC_HWMON_PREFIX#node + +#define FAN_BOARD_PATH "/sys/bus/i2c/devices/9-0066/" +#define FAN_NODE(node) FAN_BOARD_PATH#node + +#define IDPROM_PATH "/sys/bus/i2c/devices/0-0056/eeprom" + +int onlp_file_write_integer(char *filename, int value); +int onlp_file_read_binary(char *filename, char *buffer, int buf_size, int data_len); +int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_len); + +int psu_ym2651y_pmbus_info_get(int id, char *node, int *value); +int psu_ym2651y_pmbus_info_set(int id, char *node, int value); + +typedef enum psu_type { + PSU_TYPE_UNKNOWN, + PSU_TYPE_AC_F2B, + PSU_TYPE_AC_B2F +} psu_type_t; + +psu_type_t get_psu_type(int id, char* modelname, int modelname_len); + +enum onlp_thermal_id +{ + THERMAL_RESERVED = 0, + THERMAL_CPU_CORE, + THERMAL_1_ON_MAIN_BROAD, + THERMAL_2_ON_MAIN_BROAD, + THERMAL_3_ON_MAIN_BROAD, + THERMAL_4_ON_MAIN_BROAD, + THERMAL_1_ON_PSU1, + THERMAL_1_ON_PSU2, +}; + +#define DEBUG_MODE 0 + +#if (DEBUG_MODE == 1) + #define DEBUG_PRINT(fmt, args...) \ + printf("%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) +#else + #define DEBUG_PRINT(fmt, args...) +#endif + +#endif /* __PLATFORM_LIB_H__ */ + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/psui.c new file mode 100644 index 00000000..6da5aa58 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/psui.c @@ -0,0 +1,186 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2014 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include "platform_lib.h" + +#define PSU_STATUS_PRESENT 1 +#define PSU_STATUS_POWER_GOOD 1 + +#define PSU_NODE_MAX_INT_LEN 8 +#define PSU_NODE_MAX_PATH_LEN 64 + +#define VALIDATE(_id) \ + do { \ + if(!ONLP_OID_IS_PSU(_id)) { \ + return ONLP_STATUS_E_INVALID; \ + } \ + } while(0) + +static int +psu_status_info_get(int id, char *node, int *value) +{ + int ret = 0; + char path[PSU_NODE_MAX_PATH_LEN] = {0}; + + *value = 0; + + if (PSU1_ID == id) { + ret = onlp_file_read_int(value, "%s%s", PSU1_AC_HWMON_PREFIX, node); + } + else if (PSU2_ID == id) { + ret = onlp_file_read_int(value, "%s%s", PSU2_AC_HWMON_PREFIX, node); + } + + if (ret < 0) { + AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ret; +} + +int +onlp_psui_init(void) +{ + return ONLP_STATUS_OK; +} + +static int +psu_ym2651y_info_get(onlp_psu_info_t* info) +{ + int val = 0; + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_AC; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT); + + /* Read voltage, current and power */ + if (psu_ym2651y_pmbus_info_get(index, "psu_v_out", &val) == 0) { + info->mvout = val; + info->caps |= ONLP_PSU_CAPS_VOUT; + } + + if (psu_ym2651y_pmbus_info_get(index, "psu_i_out", &val) == 0) { + info->miout = val; + info->caps |= ONLP_PSU_CAPS_IOUT; + } + + if (psu_ym2651y_pmbus_info_get(index, "psu_p_out", &val) == 0) { + info->mpout = val; + info->caps |= ONLP_PSU_CAPS_POUT; + } + + return ONLP_STATUS_OK; +} + +/* + * Get all information about the given PSU oid. + */ +static onlp_psu_info_t pinfo[] = +{ + { }, /* Not used */ + { + { ONLP_PSU_ID_CREATE(PSU1_ID), "PSU-1", 0 }, + }, + { + { ONLP_PSU_ID_CREATE(PSU2_ID), "PSU-2", 0 }, + } +}; + +int +onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) +{ + int val = 0; + int ret = ONLP_STATUS_OK; + int index = ONLP_OID_ID_GET(id); + psu_type_t psu_type; + + VALIDATE(id); + + memset(info, 0, sizeof(onlp_psu_info_t)); + *info = pinfo[index]; /* Set the onlp_oid_hdr_t */ + + /* Get the present state */ + if (psu_status_info_get(index, "psu_present", &val) != 0) { + printf("Unable to read PSU(%d) node(psu_present)\r\n", index); + } + + if (val != PSU_STATUS_PRESENT) { + info->status &= ~ONLP_PSU_STATUS_PRESENT; + return ONLP_STATUS_OK; + } + info->status |= ONLP_PSU_STATUS_PRESENT; + + + /* Get power good status */ + if (psu_status_info_get(index, "psu_power_good", &val) != 0) { + printf("Unable to read PSU(%d) node(psu_power_good)\r\n", index); + } + + if (val != PSU_STATUS_POWER_GOOD) { + info->status |= ONLP_PSU_STATUS_FAILED; + } + + + /* Get PSU type + */ + psu_type = get_psu_type(index, info->model, sizeof(info->model)); + + switch (psu_type) { + case PSU_TYPE_AC_F2B: + case PSU_TYPE_AC_B2F: + ret = psu_ym2651y_info_get(info); + break; + case PSU_TYPE_UNKNOWN: /* User insert a unknown PSU or unplugged.*/ + info->status |= ONLP_PSU_STATUS_UNPLUGGED; + info->status &= ~ONLP_PSU_STATUS_FAILED; + ret = ONLP_STATUS_OK; + break; + default: + ret = ONLP_STATUS_E_UNSUPPORTED; + break; + } + + return ret; +} + +int +onlp_psui_ioctl(onlp_oid_t pid, va_list vargs) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sfpi.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sfpi.c new file mode 100644 index 00000000..19c12040 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sfpi.c @@ -0,0 +1,325 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2016 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include +#include "platform_lib.h" + +#include "x86_64_accton_as5916_54xm_log.h" + +#define NUM_OF_SFP_PORT 54 +#define MAX_SFP_PATH 64 +static char sfp_node_path[MAX_SFP_PATH] = {0}; +#define FRONT_PORT_BUS_INDEX(port) ((port <48)? (port+41):(port-23)) + +static char* +sfp_get_port_path_addr(int port, int addr, char *node_name) +{ + sprintf(sfp_node_path, "/sys/bus/i2c/devices/%d-00%d/%s", + FRONT_PORT_BUS_INDEX(port), addr, node_name); + return sfp_node_path; +} + +static char* +sfp_get_port_path(int port, char *node_name) +{ + return sfp_get_port_path_addr(port, 50, node_name); +} + +/************************************************************ + * + * SFPI Entry Points + * + ***********************************************************/ +int +onlp_sfpi_init(void) +{ + /* Called at initialization time */ + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_bitmap_get(onlp_sfp_bitmap_t* bmap) +{ + /* + * Ports {0, 54} + */ + int p; + AIM_BITMAP_INIT(bmap, 64); + AIM_BITMAP_CLR_ALL(bmap); + + for(p = 0; p < NUM_OF_SFP_PORT; p++) { + AIM_BITMAP_SET(bmap, p); + } + + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_is_present(int port) +{ + /* + * Return 1 if present. + * Return 0 if not present. + * Return < 0 if error. + */ + int present; + char *path = sfp_get_port_path(port, "sfp_is_present"); + + if (onlp_file_read_int(&present, path) < 0) { + AIM_LOG_ERROR("Unable to read present status from port(%d)\r\n", port); + return ONLP_STATUS_E_INTERNAL; + } + + return present; +} + +int +onlp_sfpi_presence_bitmap_get(onlp_sfp_bitmap_t* dst) +{ + uint32_t bytes[7]; + char* path; + FILE* fp; + + AIM_BITMAP_CLR_ALL(dst); + + path = sfp_get_port_path(0, "sfp_is_present_all"); + fp = fopen(path, "r"); + + if(fp == NULL) { + AIM_LOG_ERROR("Unable to open the sfp_is_present_all device file."); + return ONLP_STATUS_E_INTERNAL; + } + int count = fscanf(fp, "%x %x %x %x %x %x %x", + bytes+0, + bytes+1, + bytes+2, + bytes+3, + bytes+4, + bytes+5, + bytes+6 + ); + fclose(fp); + if(count != AIM_ARRAYSIZE(bytes)) { + /* Likely a CPLD read timeout. */ + AIM_LOG_ERROR("Unable to read all fields from the sfp_is_present_all device file."); + return ONLP_STATUS_E_INTERNAL; + } + + /* Mask out non-existant QSFP ports */ + bytes[6] &= 0x3F; + + /* Convert to 64 bit integer in port order */ + int i = 0; + uint64_t presence_all = 0 ; + for(i = AIM_ARRAYSIZE(bytes)-1; i >= 0; i--) { + presence_all <<= 8; + presence_all |= bytes[i]; + } + + /* Populate bitmap */ + for(i = 0; presence_all; i++) { + AIM_BITMAP_MOD(dst, i, (presence_all & 1)); + presence_all >>= 1; + } + + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_rx_los_bitmap_get(onlp_sfp_bitmap_t* dst) +{ + uint32_t bytes[6]; + char* path; + FILE* fp; + + path = sfp_get_port_path(0, "sfp_rx_los_all"); + fp = fopen(path, "r"); + + if(fp == NULL) { + AIM_LOG_ERROR("Unable to open the sfp_rx_los_all device file."); + return ONLP_STATUS_E_INTERNAL; + } + int count = fscanf(fp, "%x %x %x %x %x %x", + bytes+0, + bytes+1, + bytes+2, + bytes+3, + bytes+4, + bytes+5 + ); + fclose(fp); + if(count != 6) { + AIM_LOG_ERROR("Unable to read all fields from the sfp_rx_los_all device file."); + return ONLP_STATUS_E_INTERNAL; + } + + /* Convert to 64 bit integer in port order */ + int i = 0; + uint64_t rx_los_all = 0 ; + for(i = 5; i >= 0; i--) { + rx_los_all <<= 8; + rx_los_all |= bytes[i]; + } + + /* Populate bitmap */ + for(i = 0; rx_los_all; i++) { + AIM_BITMAP_MOD(dst, i, (rx_los_all & 1)); + rx_los_all >>= 1; + } + + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_eeprom_read(int port, uint8_t data[256]) +{ + char* path = sfp_get_port_path(port, "sfp_eeprom"); + + /* + * Read the SFP eeprom into data[] + * + * Return MISSING if SFP is missing. + * Return OK if eeprom is read + */ + memset(data, 0, 256); + + if (onlp_file_read_binary(path, (char*)data, 256, 256) != 0) { + AIM_LOG_ERROR("Unable to read eeprom from port(%d)\r\n", port); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_dom_read(int port, uint8_t data[256]) +{ + char* path = sfp_get_port_path_addr(port, 51, "sfp_eeprom"); + memset(data, 0, 256); + + if (onlp_file_read_binary(path, (char*)data, 256, 256) != 0) { + AIM_LOG_INFO("Unable to read eeprom from port(%d)\r\n", port); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + +int +onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value) +{ + int rv; + + switch(control) + { + case ONLP_SFP_CONTROL_TX_DISABLE: + { + char* path = sfp_get_port_path(port, "sfp_tx_disable"); + + if (onlp_file_write_integer(path, value) != 0) { + AIM_LOG_ERROR("Unable to set tx_disable status to port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + default: + rv = ONLP_STATUS_E_UNSUPPORTED; + break; + } + + return rv; +} + +int +onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value) +{ + int rv; + char* path = NULL; + + switch(control) + { + case ONLP_SFP_CONTROL_RX_LOS: + { + path = sfp_get_port_path(port, "sfp_rx_los"); + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read rx_los status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + case ONLP_SFP_CONTROL_TX_FAULT: + { + path = sfp_get_port_path(port, "sfp_tx_fault"); + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read tx_fault status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + case ONLP_SFP_CONTROL_TX_DISABLE: + { + path = sfp_get_port_path(port, "sfp_tx_disable"); + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read tx_disabled status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + default: + rv = ONLP_STATUS_E_UNSUPPORTED; + } + + return rv; +} + + +int +onlp_sfpi_denit(void) +{ + return ONLP_STATUS_OK; +} + + + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c new file mode 100644 index 00000000..1bb0e9f5 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c @@ -0,0 +1,359 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2014 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * + * + ***********************************************************/ +#include +#include + +#include +#include +#include +#include +#include +#include +#include "platform_lib.h" + +#include "x86_64_accton_as5916_54xm_int.h" +#include "x86_64_accton_as5916_54xm_log.h" + +#define CPLD_VERSION_FORMAT "/sys/bus/i2c/devices/%s/version" +#define NUM_OF_CPLD 2 + +static char* cpld_path[NUM_OF_CPLD] = +{ + "4-0060", + "5-0062" +}; + +const char* +onlp_sysi_platform_get(void) +{ + return "x86-64-accton-as5916-54xm-r0"; +} + +int +onlp_sysi_onie_data_get(uint8_t** data, int* size) +{ + uint8_t* rdata = aim_zmalloc(256); + if(onlp_file_read(rdata, 256, size, IDPROM_PATH) == ONLP_STATUS_OK) { + if(*size == 256) { + *data = rdata; + return ONLP_STATUS_OK; + } + } + + aim_free(rdata); + *size = 0; + return ONLP_STATUS_E_INTERNAL; +} + +int +onlp_sysi_oids_get(onlp_oid_t* table, int max) +{ + int i; + onlp_oid_t* e = table; + memset(table, 0, max*sizeof(onlp_oid_t)); + + /* 5 Thermal sensors on the chassis */ + for (i = 1; i <= CHASSIS_THERMAL_COUNT; i++) { + *e++ = ONLP_THERMAL_ID_CREATE(i); + } + + /* 5 LEDs on the chassis */ + for (i = 1; i <= CHASSIS_LED_COUNT; i++) { + *e++ = ONLP_LED_ID_CREATE(i); + } + + /* 2 PSUs on the chassis */ + for (i = 1; i <= CHASSIS_PSU_COUNT; i++) { + *e++ = ONLP_PSU_ID_CREATE(i); + } + + /* 6 Fans on the chassis */ + for (i = 1; i <= CHASSIS_FAN_COUNT; i++) { + *e++ = ONLP_FAN_ID_CREATE(i); + } + + return 0; +} + +int +onlp_sysi_platform_info_get(onlp_platform_info_t* pi) +{ + int i, v[NUM_OF_CPLD] = {0}; + + for (i=0; i < AIM_ARRAYSIZE(cpld_path); i++) { + v[i] = 0; + + if(onlp_file_read_int(v+i, CPLD_VERSION_FORMAT , cpld_path[i]) < 0) { + return ONLP_STATUS_E_INTERNAL; + } + } + + pi->cpld_versions = aim_fstrdup("%d.%d", v[0], v[1]); + return ONLP_STATUS_OK; +} + +void +onlp_sysi_platform_info_free(onlp_platform_info_t* pi) +{ + aim_free(pi->cpld_versions); +} + +#define FAN_DUTY_MAX (32)//(100/3) +#define FAN_DUTY_MID (19) //(69) +#define FAN_DUTY_MIN (13)//(38) + +#define FANCTRL_DIR_FACTOR (ONLP_FAN_STATUS_B2F) +#define FANCTRL_DIR_FACTOR_DUTY_ADDON (6) + +static int +sysi_fanctrl_fan_fault_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT], + int *adjusted) +{ + int i; + *adjusted = 0; + + /* Bring fan speed to FAN_DUTY_MAX if any fan is not operational */ + for (i = 0; i < CHASSIS_FAN_COUNT; i++) { + if (!(fi[i].status & ONLP_FAN_STATUS_FAILED)) { + continue; + } + + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + + return ONLP_STATUS_OK; +} + +static int +sysi_fanctrl_fan_absent_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT], + int *adjusted) +{ + int i; + *adjusted = 0; + + /* Bring fan speed to FAN_DUTY_MAX if fan is not present */ + for (i = 0; i < CHASSIS_FAN_COUNT; i++) { + if (fi[i].status & ONLP_FAN_STATUS_PRESENT) { + continue; + } + + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + + return ONLP_STATUS_OK; +} + +static int +sysi_fanctrl_fan_unknown_speed_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT], + int *adjusted) +{ + int fanduty; + int fanduty_min = FAN_DUTY_MIN; + int fanduty_mid = FAN_DUTY_MID; + + *adjusted = 0; + fanduty_min += (fi[0].status & FANCTRL_DIR_FACTOR) ? FANCTRL_DIR_FACTOR_DUTY_ADDON : 0; + fanduty_mid += (fi[0].status & FANCTRL_DIR_FACTOR) ? FANCTRL_DIR_FACTOR_DUTY_ADDON : 0; + + if (onlp_file_read_int(&fanduty, FAN_NODE(fan_duty_cycle_percentage)) < 0) { + *adjusted = 1; + printf("[ROY]%s#%d, fanduty:%d \n", __func__, __LINE__,fanduty); + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + + + printf("[ROY]%s#%d, fanduty:%d \n", __func__, __LINE__,fanduty); + /* Bring fan speed to max if current speed is not expected + */ + if (fanduty != fanduty_min && fanduty != fanduty_mid && fanduty != FAN_DUTY_MAX) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + + return ONLP_STATUS_OK; +} + +static int +sysi_fanctrl_single_thermal_sensor_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT], + int *adjusted) +{ + int i; + *adjusted = 0; + + /* When anyone higher than 50 degrees, all fans run with duty 100%. + */ + for (i = (THERMAL_1_ON_MAIN_BROAD); i <= (THERMAL_3_ON_MAIN_BROAD); i++) { + if (ti[i-1].mcelsius < 50000) { + continue; + } + printf("[ROY]%s#%d, i:%d, t:%d\n", __func__, __LINE__, i, ti[i-1].mcelsius); + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + + /* When anyone higher than 45 degrees, all fans run with duty 62.5%. + */ + for (i = (THERMAL_1_ON_MAIN_BROAD); i <= (THERMAL_3_ON_MAIN_BROAD); i++) { + if (ti[i-1].mcelsius < 45000) { + continue; + } + + int fanduty_mid = FAN_DUTY_MID; + fanduty_mid += (fi[0].status & FANCTRL_DIR_FACTOR) ? FANCTRL_DIR_FACTOR_DUTY_ADDON : 0; + + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_mid); + } + + return ONLP_STATUS_OK; +} + +static int +sysi_fanctrl_overall_thermal_sensor_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT], + int *adjusted) +{ + int fanduty_min = FAN_DUTY_MIN; + int fanduty_mid = FAN_DUTY_MID; + int i, num_of_sensor = 0, temp_avg = 0; + + *adjusted = 0; + fanduty_min += (fi[0].status & FANCTRL_DIR_FACTOR) ? FANCTRL_DIR_FACTOR_DUTY_ADDON : 0; + fanduty_mid += (fi[0].status & FANCTRL_DIR_FACTOR) ? FANCTRL_DIR_FACTOR_DUTY_ADDON : 0; + + for (i = (THERMAL_1_ON_MAIN_BROAD); i <= (THERMAL_3_ON_MAIN_BROAD); i++) { + num_of_sensor++; + temp_avg += ti[i-1].mcelsius; + } + + temp_avg /= num_of_sensor; + + printf("[ROY]%s#%d, num:%d, temp_avg:%d\n", __func__, __LINE__,num_of_sensor, temp_avg); + + if (temp_avg >= 36000) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + else if (temp_avg >= 35000) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_mid); + } + else if (temp_avg < 34000) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_min); + } + +/* + if (temp_avg >= 45000) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + } + else if (temp_avg >= 40000) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_mid); + } + else if (temp_avg < 35000) { + *adjusted = 1; + return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_min); + }*/ + + return ONLP_STATUS_OK; +} + +typedef int (*fan_control_policy)(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT], + int *adjusted); + +fan_control_policy fan_control_policies[] = { +sysi_fanctrl_fan_fault_policy, +sysi_fanctrl_fan_absent_policy, +sysi_fanctrl_fan_unknown_speed_policy, +sysi_fanctrl_single_thermal_sensor_policy, +sysi_fanctrl_overall_thermal_sensor_policy, +}; + +int +onlp_sysi_platform_manage_fans(void) +{ + int i, rc; + onlp_fan_info_t fi[CHASSIS_FAN_COUNT]; + onlp_thermal_info_t ti[CHASSIS_THERMAL_COUNT]; + + memset(fi, 0, sizeof(fi)); + memset(ti, 0, sizeof(ti)); + + /* Get fan status + */ + for (i = 0; i < CHASSIS_FAN_COUNT; i++) { + rc = onlp_fani_info_get(ONLP_FAN_ID_CREATE(i+1), &fi[i]); + + if (rc != ONLP_STATUS_OK) { + onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + return ONLP_STATUS_E_INTERNAL; + } + } + + /* Get thermal sensor status + */ + for (i = 0; i < CHASSIS_THERMAL_COUNT; i++) { + rc = onlp_thermali_info_get(ONLP_THERMAL_ID_CREATE(i+1), &ti[i]); + + if (rc != ONLP_STATUS_OK) { + onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); + return ONLP_STATUS_E_INTERNAL; + } + } + + /* Apply thermal policy according the policy list, + * If fan duty is adjusted by one of the policies, skip the others + */ + for (i = 0; i < AIM_ARRAYSIZE(fan_control_policies); i++) { + int adjusted = 0; + + rc = fan_control_policies[i](fi, ti, &adjusted); + if (!adjusted) { + continue; + } + + printf("[ROY]%s#%d, fan_control_policies:%d \n", __func__, __LINE__,i ); + return rc; + } + + return ONLP_STATUS_OK; +} + +int +onlp_sysi_platform_manage_leds(void) +{ + return ONLP_STATUS_E_UNSUPPORTED; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/thermali.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/thermali.c new file mode 100644 index 00000000..742a4dd1 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/thermali.c @@ -0,0 +1,128 @@ +/************************************************************ + * + * + * Copyright 2014 Big Switch Networks, Inc. + * Copyright 2014 Accton Technology Corporation. + * + * Licensed under the Eclipse Public License, Version 1.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.eclipse.org/legal/epl-v10.html + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + * + * + ************************************************************ + * + * Thermal Sensor Platform Implementation. + * + ***********************************************************/ +#include +#include +#include "platform_lib.h" + +#define VALIDATE(_id) \ + do { \ + if(!ONLP_OID_IS_THERMAL(_id)) { \ + return ONLP_STATUS_E_INVALID; \ + } \ + } while(0) + +static char* devfiles__[] = /* must map with onlp_thermal_id */ +{ + NULL, + NULL, /* CPU_CORE files */ + "/sys/bus/i2c/devices/10-0048*temp1_input", + "/sys/bus/i2c/devices/10-0049*temp1_input", + "/sys/bus/i2c/devices/10-004a*temp1_input", + "/sys/bus/i2c/devices/10-004b*temp1_input", + "/sys/bus/i2c/devices/18-005b*psu_temp1_input", + "/sys/bus/i2c/devices/17-0058*psu_temp1_input", +}; + +static char* cpu_coretemp_files[] = + { + "/sys/devices/platform/coretemp.0*temp2_input", + "/sys/devices/platform/coretemp.0*temp3_input", + "/sys/devices/platform/coretemp.0*temp4_input", + "/sys/devices/platform/coretemp.0*temp5_input", + NULL, + }; + +/* Static values */ +static onlp_thermal_info_t linfo[] = { + { }, /* Not used */ + { { ONLP_THERMAL_ID_CREATE(THERMAL_CPU_CORE), "CPU Core", 0}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(THERMAL_1_ON_MAIN_BROAD), "LM75-1-48", 0}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(THERMAL_2_ON_MAIN_BROAD), "LM75-2-49", 0}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(THERMAL_3_ON_MAIN_BROAD), "LM75-3-4A", 0}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(THERMAL_4_ON_MAIN_BROAD), "LM75-3-4B", 0}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(THERMAL_1_ON_PSU1), "PSU-1 Thermal Sensor 1", ONLP_PSU_ID_CREATE(PSU1_ID)}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + }, + { { ONLP_THERMAL_ID_CREATE(THERMAL_1_ON_PSU2), "PSU-2 Thermal Sensor 1", ONLP_PSU_ID_CREATE(PSU2_ID)}, + ONLP_THERMAL_STATUS_PRESENT, + ONLP_THERMAL_CAPS_ALL, 0, ONLP_THERMAL_THRESHOLD_INIT_DEFAULTS + } +}; + +/* + * This will be called to intiialize the thermali subsystem. + */ +int +onlp_thermali_init(void) +{ + return ONLP_STATUS_OK; +} + +/* + * Retrieve the information structure for the given thermal OID. + * + * If the OID is invalid, return ONLP_E_STATUS_INVALID. + * If an unexpected error occurs, return ONLP_E_STATUS_INTERNAL. + * Otherwise, return ONLP_STATUS_OK with the OID's information. + * + * Note -- it is expected that you fill out the information + * structure even if the sensor described by the OID is not present. + */ +int +onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) +{ + int tid; + VALIDATE(id); + + tid = ONLP_OID_ID_GET(id); + + /* Set the onlp_oid_hdr_t and capabilities */ + *info = linfo[tid]; + + if(tid == THERMAL_CPU_CORE) { + int rv = onlp_file_read_int_max(&info->mcelsius, cpu_coretemp_files); + return rv; + } + + return onlp_file_read_int(&info->mcelsius, devfiles__[tid]); +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_config.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_config.c new file mode 100644 index 00000000..a22a97d3 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_config.c @@ -0,0 +1,80 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +/* */ +#define __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(_x) #_x +#define __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(_x) __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(_x) +x86_64_accton_as5916_54xm_config_settings_t x86_64_accton_as5916_54xm_config_settings[] = +{ +#ifdef x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif +#ifdef x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION + { __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME(x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION), __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE(x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION) }, +#else +{ x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION(__x86_64_accton_as5916_54xm_config_STRINGIFY_NAME), "__undefined__" }, +#endif + { NULL, NULL } +}; +#undef __x86_64_accton_as5916_54xm_config_STRINGIFY_VALUE +#undef __x86_64_accton_as5916_54xm_config_STRINGIFY_NAME + +const char* +x86_64_accton_as5916_54xm_config_lookup(const char* setting) +{ + int i; + for(i = 0; x86_64_accton_as5916_54xm_config_settings[i].name; i++) { + if(strcmp(x86_64_accton_as5916_54xm_config_settings[i].name, setting)) { + return x86_64_accton_as5916_54xm_config_settings[i].value; + } + } + return NULL; +} + +int +x86_64_accton_as5916_54xm_config_show(struct aim_pvs_s* pvs) +{ + int i; + for(i = 0; x86_64_accton_as5916_54xm_config_settings[i].name; i++) { + aim_printf(pvs, "%s = %s\n", x86_64_accton_as5916_54xm_config_settings[i].name, x86_64_accton_as5916_54xm_config_settings[i].value); + } + return i; +} + +/* */ \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_enums.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_enums.c new file mode 100644 index 00000000..7bb86527 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_enums.c @@ -0,0 +1,10 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +/* <--auto.start.enum(ALL).source> */ +/* */ + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_int.h b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_int.h new file mode 100644 index 00000000..ccc3c1de --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_int.h @@ -0,0 +1,12 @@ +/**************************************************************************//** + * + * x86_64_accton_as5916_54xm Internal Header + * + *****************************************************************************/ +#ifndef __x86_64_accton_as5916_54xm_INT_H__ +#define __x86_64_accton_as5916_54xm_INT_H__ + +#include + + +#endif /* __x86_64_accton_as5916_54xm_INT_H__ */ \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.c new file mode 100644 index 00000000..a29f4d68 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.c @@ -0,0 +1,18 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +#include "x86_64_accton_as5916_54xm_log.h" +/* + * x86_64_accton_as5916_54xm log struct. + */ +AIM_LOG_STRUCT_DEFINE( + x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT, + x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT, + NULL, /* Custom log map */ + x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT + ); + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.h b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.h new file mode 100644 index 00000000..f2a37591 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_log.h @@ -0,0 +1,12 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#ifndef __x86_64_accton_as5916_54xm_LOG_H__ +#define __x86_64_accton_as5916_54xm_LOG_H__ + +#define AIM_LOG_MODULE_NAME x86_64_accton_as5916_54xm +#include + +#endif /* __x86_64_accton_as5916_54xm_LOG_H__ */ \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_module.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_module.c new file mode 100644 index 00000000..76dd6e7f --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_module.c @@ -0,0 +1,24 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +#include "x86_64_accton_as5916_54xm_log.h" + +static int +datatypes_init__(void) +{ +#define x86_64_accton_as5916_54xm_ENUMERATION_ENTRY(_enum_name, _desc) AIM_DATATYPE_MAP_REGISTER(_enum_name, _enum_name##_map, _desc, AIM_LOG_INTERNAL); +#include + return 0; +} + +void __x86_64_accton_as5916_54xm_module_init__(void) +{ + AIM_LOG_STRUCT_REGISTER(); + datatypes_init__(); +} + +int __onlp_platform_version__ = 1; \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_ucli.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_ucli.c new file mode 100644 index 00000000..09dcdce2 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/x86_64_accton_as5916_54xm_ucli.c @@ -0,0 +1,50 @@ +/**************************************************************************//** + * + * + * + *****************************************************************************/ +#include + +#if x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI == 1 + +#include +#include +#include + +static ucli_status_t +x86_64_accton_as5916_54xm_ucli_ucli__config__(ucli_context_t* uc) +{ + UCLI_HANDLER_MACRO_MODULE_CONFIG(x86_64_accton_as5916_54xm) +} + +/* */ +/* */ + +static ucli_module_t +x86_64_accton_as5916_54xm_ucli_module__ = + { + "x86_64_accton_as5916_54xm_ucli", + NULL, + x86_64_accton_as5916_54xm_ucli_ucli_handlers__, + NULL, + NULL, + }; + +ucli_node_t* +x86_64_accton_as5916_54xm_ucli_node_create(void) +{ + ucli_node_t* n; + ucli_module_init(&x86_64_accton_as5916_54xm_ucli_module__); + n = ucli_node_create("x86_64_accton_as5916_54xm", NULL, &x86_64_accton_as5916_54xm_ucli_module__); + ucli_node_subnode_add(n, ucli_module_log_node_create("x86_64_accton_as5916_54xm")); + return n; +} + +#else +void* +x86_64_accton_as5916_54xm_ucli_node_create(void) +{ + return NULL; +} +#endif + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/PKG.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/PKG.yml new file mode 100644 index 00000000..02af1c3e --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/PKG.yml @@ -0,0 +1 @@ +!include $ONL_TEMPLATES/platform-config-platform.yml ARCH=amd64 VENDOR=accton BASENAME=x86-64-accton-as5916-54xm REVISION=r0 diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/lib/x86-64-accton-as5916-54xm-r0.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/lib/x86-64-accton-as5916-54xm-r0.yml new file mode 100644 index 00000000..2c36d552 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/lib/x86-64-accton-as5916-54xm-r0.yml @@ -0,0 +1,33 @@ +--- + +###################################################################### +# +# platform-config for AS5916 +# +###################################################################### + +x86-64-accton-as5916-54xm-r0: + + grub: + + serial: >- + --port=0x3f8 + --speed=115200 + --word=8 + --parity=no + --stop=1 + + kernel: + <<: *kernel-3-16 + + args: >- + nopat + console=ttyS0,115200n8 + tg3.short_preamble=1 + tg3.bcm5718s_reset=1 + + ##network: + ## interfaces: + ## ma1: + ## name: ~ + ## syspath: pci0000:00/0000:00:1c.0/0000:0a:00.0 diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/python/x86_64_accton_as5916_54xm_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/python/x86_64_accton_as5916_54xm_r0/__init__.py new file mode 100644 index 00000000..454c3122 --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/platform-config/r0/src/python/x86_64_accton_as5916_54xm_r0/__init__.py @@ -0,0 +1,92 @@ +from onl.platform.base import * +from onl.platform.accton import * + +class OnlPlatform_x86_64_accton_as5916_54xm_r0(OnlPlatformAccton, + OnlPlatformPortConfig_48x10_6x40): + PLATFORM='x86-64-accton-as5916-54xm-r0' + MODEL="AS5916-54XM" + SYS_OBJECT_ID=".5916.54" + + def baseconfig(self): + self.insmod("accton_i2c_cpld") + self.insmod("ym2651y") + for m in [ "sfp", "psu", "fan", "leds" ]: + self.insmod("x86-64-accton-as5916-54xm-%s" % m) + + ########### initialize I2C bus 0 ########### + self.new_i2c_devices([ + # initialize multiplexer (PCA9548) + ('pca9548', 0x77, 0), + + # initiate IDPROM + ('24c02', 0x56, 0), + ]) + + self.new_i2c_devices([ + # initialize multiplexer (PCA9548) + ('pca9548', 0x76, 1), + + # initiate chassis fan + ('as5916_54xm_fan', 0x66, 9), + + # inititate LM75 + ('lm75', 0x48, 10), + ('lm75', 0x49, 10), + ('lm75', 0x4a, 10), + ('lm75', 0x4b, 10), + + # initialize CPLDs + ('accton_i2c_cpld', 0x60, 11), + ('accton_i2c_cpld', 0x62, 12), + ] + ) + + self.new_i2c_devices( + [ + # initialize multiplexer (PCA9548) + ('pca9548', 0x74, 1), + + # initiate PSU-1 AC Power + ('as5916_54xm_psu1', 0x53, 18), + ('ym2651', 0x5b, 18), + + # initiate PSU-2 AC Power + ('as5916_54xm_psu2', 0x50, 17), + ('ym2651', 0x58, 17), + + ] + ) + + self.new_i2c_devices( + [ + # initialize multiplexer (PCA9548) + ('pca9548', 0x70, 1), + ] + ) + # initialize QSFP devices + for port in range(49, 55): + self.new_i2c_device('as5916_54xm_sfp%d' % port, 0x50, port-24) + + + ########### initialize I2C bus 1 ########### + + # initialize multiplexer (PCA9548) for SFP ports self.new_i2c_devices( + self.new_i2c_devices( + [ + ('pca9548', 0x76, 2), + ('pca9548', 0x70, 33), + ('pca9548', 0x71, 34), + ('pca9548', 0x72, 35), + ('pca9548', 0x73, 36), + ('pca9548', 0x74, 37), + ('pca9548', 0x75, 38), + ] + ) + + # initialize SFP devices + for port in range(1, 49): + self.new_i2c_device('as5916_54xm_sfp%d' % port, 0x50, port+40) + self.new_i2c_device('as5916_54xm_sfp%d' % port, 0x51, port+40) + + return True + From 4865949ea42b3b665488591e06572c5bf5425140 Mon Sep 17 00:00:00 2001 From: roylee123 Date: Thu, 25 May 2017 16:48:37 +0800 Subject: [PATCH 03/31] add accton-as5916-54xm, and remove debug message --- .../onlp/builds/src/module/src/fani.c | 3 -- .../onlp/builds/src/module/src/sysi.c | 30 ++++--------------- 2 files changed, 5 insertions(+), 28 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c index 7ff55407..9eb030ce 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/fani.c @@ -297,9 +297,6 @@ onlp_fani_percentage_set(onlp_oid_t id, int p) return ONLP_STATUS_E_INVALID; } - printf("[ROY]%s#%d, fid:%d, duty:%d\n", __func__, __LINE__,fid, p); - - switch (fid) { case FAN_1_ON_PSU_1: diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c index 1bb0e9f5..08eb6e24 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/sysi.c @@ -121,9 +121,9 @@ onlp_sysi_platform_info_free(onlp_platform_info_t* pi) aim_free(pi->cpld_versions); } -#define FAN_DUTY_MAX (32)//(100/3) -#define FAN_DUTY_MID (19) //(69) -#define FAN_DUTY_MIN (13)//(38) +#define FAN_DUTY_MAX (100) +#define FAN_DUTY_MID (69) +#define FAN_DUTY_MIN (38) #define FANCTRL_DIR_FACTOR (ONLP_FAN_STATUS_B2F) #define FANCTRL_DIR_FACTOR_DUTY_ADDON (6) @@ -185,12 +185,9 @@ sysi_fanctrl_fan_unknown_speed_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], if (onlp_file_read_int(&fanduty, FAN_NODE(fan_duty_cycle_percentage)) < 0) { *adjusted = 1; - printf("[ROY]%s#%d, fanduty:%d \n", __func__, __LINE__,fanduty); return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); } - - printf("[ROY]%s#%d, fanduty:%d \n", __func__, __LINE__,fanduty); /* Bring fan speed to max if current speed is not expected */ if (fanduty != fanduty_min && fanduty != fanduty_mid && fanduty != FAN_DUTY_MAX) { @@ -215,7 +212,7 @@ sysi_fanctrl_single_thermal_sensor_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT], if (ti[i-1].mcelsius < 50000) { continue; } - printf("[ROY]%s#%d, i:%d, t:%d\n", __func__, __LINE__, i, ti[i-1].mcelsius); + *adjusted = 1; return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); } @@ -257,22 +254,6 @@ sysi_fanctrl_overall_thermal_sensor_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT] temp_avg /= num_of_sensor; - printf("[ROY]%s#%d, num:%d, temp_avg:%d\n", __func__, __LINE__,num_of_sensor, temp_avg); - - if (temp_avg >= 36000) { - *adjusted = 1; - return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); - } - else if (temp_avg >= 35000) { - *adjusted = 1; - return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_mid); - } - else if (temp_avg < 34000) { - *adjusted = 1; - return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_min); - } - -/* if (temp_avg >= 45000) { *adjusted = 1; return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), FAN_DUTY_MAX); @@ -284,7 +265,7 @@ sysi_fanctrl_overall_thermal_sensor_policy(onlp_fan_info_t fi[CHASSIS_FAN_COUNT] else if (temp_avg < 35000) { *adjusted = 1; return onlp_fani_percentage_set(ONLP_FAN_ID_CREATE(1), fanduty_min); - }*/ + } return ONLP_STATUS_OK; } @@ -344,7 +325,6 @@ onlp_sysi_platform_manage_fans(void) continue; } - printf("[ROY]%s#%d, fan_control_policies:%d \n", __func__, __LINE__,i ); return rc; } From 22e351983a077ede1e634a99ce15fd8655f6994c Mon Sep 17 00:00:00 2001 From: "Oleksandr Shamray oleksandrs@mellanox.com" Date: Wed, 24 May 2017 10:36:27 +0000 Subject: [PATCH 04/31] Added onlp_sfp_dev_readb and onlp_sfp_dev_readw support to msn2100, msn2410 and msn2700 systems V2->v1 Comments pointed out by Vadim: - remove unnecessary braces; Signed-off-by: Oleksandr Shamray --- .../onlp/builds/src/module/src/sfpi.c | 51 +++++++++++++++++- .../onlp/builds/src/module/src/sfpi.c | 53 ++++++++++++++++++- .../onlp/builds/src/module/src/sfpi.c | 51 +++++++++++++++++- 3 files changed, 149 insertions(+), 6 deletions(-) diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sfpi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sfpi.c index 51fa0147..6b799584 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sfpi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sfpi.c @@ -68,6 +68,13 @@ msn2100_sfp_get_port_path(int port, char *node_name) return sfp_node_path; } +static char* +msn2100_sfp_convert_i2c_path(int port, int devaddr) +{ + sprintf(sfp_node_path, "/bsp/qsfp/qsfp%d", port); + return sfp_node_path; +} + /************************************************************ * * SFPI Entry Points @@ -150,7 +157,27 @@ onlp_sfpi_eeprom_read(int port, uint8_t data[256]) int onlp_sfpi_dev_readb(int port, uint8_t devaddr, uint8_t addr) { - return ONLP_STATUS_E_UNSUPPORTED; + char* path = msn2100_sfp_convert_i2c_path(port, devaddr); + uint8_t data; + int fd; + int nrd; + + if (!path) + return ONLP_STATUS_E_MISSING; + + fd = open(path, O_RDONLY); + if (fd < 0) + return ONLP_STATUS_E_MISSING; + + lseek(fd, addr, SEEK_SET); + nrd = read(fd, &data, 1); + close(fd); + + if (nrd != 1) { + AIM_LOG_INTERNAL("Failed to read EEPROM file '%s'", path); + return ONLP_STATUS_E_INTERNAL; + } + return data; } int @@ -162,7 +189,27 @@ onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) int onlp_sfpi_dev_readw(int port, uint8_t devaddr, uint8_t addr) { - return ONLP_STATUS_E_UNSUPPORTED; + char* path = msn2100_sfp_convert_i2c_path(port, devaddr); + uint16_t data; + int fd; + int nrd; + + if (!path) + return ONLP_STATUS_E_MISSING; + + fd = open(path, O_RDONLY); + if (fd < 0) + return ONLP_STATUS_E_MISSING; + + lseek(fd, addr, SEEK_SET); + nrd = read(fd, &data, 2); + close(fd); + + if (nrd != 2) { + AIM_LOG_INTERNAL("Failed to read EEPROM file '%s'", path); + return ONLP_STATUS_E_INTERNAL; + } + return data; } int diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sfpi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sfpi.c index 7ee8262a..bc65322a 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sfpi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sfpi.c @@ -68,6 +68,13 @@ msn2410_sfp_get_port_path(int port, char *node_name) return sfp_node_path; } +static char* +sn2410_sfp_convert_i2c_path(int port, int devaddr) +{ + sprintf(sfp_node_path, "/bsp/qsfp/qsfp%d", port); + return sfp_node_path; +} + /************************************************************ * * SFPI Entry Points @@ -153,7 +160,27 @@ onlp_sfpi_eeprom_read(int port, uint8_t data[256]) int onlp_sfpi_dev_readb(int port, uint8_t devaddr, uint8_t addr) { - return ONLP_STATUS_E_UNSUPPORTED; + char* path = sn2410_sfp_convert_i2c_path(port, devaddr); + uint8_t data; + int fd; + int nrd; + + if (!path) + return ONLP_STATUS_E_MISSING; + + fd = open(path, O_RDONLY); + if (fd < 0) + return ONLP_STATUS_E_MISSING; + + lseek(fd, addr, SEEK_SET); + nrd = read(fd, &data, 1); + close(fd); + + if (nrd != 1) { + AIM_LOG_INTERNAL("Failed to read EEPROM file '%s'", path); + return ONLP_STATUS_E_INTERNAL; + } + return data; } int @@ -165,7 +192,29 @@ onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) int onlp_sfpi_dev_readw(int port, uint8_t devaddr, uint8_t addr) { - return ONLP_STATUS_E_UNSUPPORTED; + char* path = sn2410_sfp_convert_i2c_path(port, devaddr); + uint16_t data; + int fd; + int nrd; + + if (!path){ + return ONLP_STATUS_E_MISSING; + } + + fd = open(path, O_RDONLY); + if (fd < 0) { + return ONLP_STATUS_E_MISSING; + } + + lseek(fd, addr, SEEK_SET); + nrd = read(fd, &data, 2); + close(fd); + + if (nrd != 2) { + AIM_LOG_INTERNAL("Failed to read EEPROM file '%s'", path); + return ONLP_STATUS_E_INTERNAL; + } + return data; } int diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sfpi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sfpi.c index 4e9851f9..ad5b5fa7 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sfpi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sfpi.c @@ -68,6 +68,13 @@ sn2700_sfp_get_port_path(int port, char *node_name) return sfp_node_path; } +static char* +sn2700_sfp_convert_i2c_path(int port, int devaddr) +{ + sprintf(sfp_node_path, "/bsp/qsfp/qsfp%d", port); + return sfp_node_path; +} + /************************************************************ * * SFPI Entry Points @@ -153,7 +160,27 @@ onlp_sfpi_eeprom_read(int port, uint8_t data[256]) int onlp_sfpi_dev_readb(int port, uint8_t devaddr, uint8_t addr) { - return ONLP_STATUS_E_UNSUPPORTED; + char* path = sn2700_sfp_convert_i2c_path(port, devaddr); + uint8_t data; + int fd; + int nrd; + + if (!path) + return ONLP_STATUS_E_MISSING; + + fd = open(path, O_RDONLY); + if (fd < 0) + return ONLP_STATUS_E_MISSING; + + lseek(fd, addr, SEEK_SET); + nrd = read(fd, &data, 1); + close(fd); + + if (nrd != 1) { + AIM_LOG_INTERNAL("Failed to read EEPROM file '%s'", path); + return ONLP_STATUS_E_INTERNAL; + } + return data; } int @@ -165,7 +192,27 @@ onlp_sfpi_dev_writeb(int port, uint8_t devaddr, uint8_t addr, uint8_t value) int onlp_sfpi_dev_readw(int port, uint8_t devaddr, uint8_t addr) { - return ONLP_STATUS_E_UNSUPPORTED; + char* path = sn2700_sfp_convert_i2c_path(port, devaddr); + uint16_t data; + int fd; + int nrd; + + if (!path) + return ONLP_STATUS_E_MISSING; + + fd = open(path, O_RDONLY); + if (fd < 0) + return ONLP_STATUS_E_MISSING; + + lseek(fd, addr, SEEK_SET); + nrd = read(fd, &data, 2); + close(fd); + + if (nrd != 2) { + AIM_LOG_INTERNAL("Failed to read EEPROM file '%s'", path); + return ONLP_STATUS_E_INTERNAL; + } + return data; } int From e892e00c8e81d97a2938d718fa68fb759b65a965 Mon Sep 17 00:00:00 2001 From: "Oleksandr Shamray oleksandrs@mellanox.com" Date: Fri, 2 Jun 2017 16:10:47 +0000 Subject: [PATCH 05/31] Add LED manage function to sysi.c to 2410 and 2700 systems Fix led_mode comparation in ledi.c --- .../onlp/builds/src/module/src/ledi.c | 3 + .../onlp/builds/src/module/src/ledi.c | 13 +--- .../onlp/builds/src/module/src/platform_lib.h | 16 +++++ .../onlp/builds/src/module/src/sysi.c | 64 +++++++++++++++++++ .../onlp/builds/src/module/src/ledi.c | 16 +---- .../onlp/builds/src/module/src/platform_lib.h | 16 +++++ .../onlp/builds/src/module/src/sysi.c | 64 +++++++++++++++++++ 7 files changed, 169 insertions(+), 23 deletions(-) diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c index 6966e6bd..64087c84 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c @@ -153,8 +153,11 @@ static onlp_led_info_t linfo[] = static int driver_to_onlp_led_mode(enum onlp_led_id id, char* driver_led_mode) { + char *pos; int i, nsize = sizeof(led_map)/sizeof(led_map[0]); + if ((pos=strchr(driver_led_mode, '\n')) != NULL) + *pos = '\0'; for (i = 0; i < nsize; i++) { if (id == led_map[i].id && diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/ledi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/ledi.c index 592d58e1..f903c899 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/ledi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/ledi.c @@ -52,16 +52,6 @@ /* LED related data */ -enum onlp_led_id -{ - LED_RESERVED = 0, - LED_SYSTEM, - LED_FAN1, - LED_FAN2, - LED_FAN3, - LED_FAN4, - LED_PSU, -}; typedef struct led_light_mode_map { enum onlp_led_id id; @@ -170,8 +160,11 @@ static onlp_led_info_t linfo[] = static int driver_to_onlp_led_mode(enum onlp_led_id id, char* driver_led_mode) { + char *pos; int i, nsize = sizeof(led_map)/sizeof(led_map[0]); + if ((pos=strchr(driver_led_mode, '\n')) != NULL) + *pos = '\0'; for (i = 0; i < nsize; i++) { if (id == led_map[i].id && diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h index 68242891..5e3060dc 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h @@ -42,6 +42,22 @@ #define PSU_POWER_PREFIX "/bsp/power/psu%d_%s" #define IDPROM_PATH "/bsp/eeprom/%s%d_info" +#define MIN_LIMIT_FRONT_FAN_RPM 21000 +#define MIN_LIMIT_REAR_FAN_RPM 21000 + +/* LED related data + */ +enum onlp_led_id +{ + LED_RESERVED = 0, + LED_SYSTEM, + LED_FAN1, + LED_FAN2, + LED_FAN3, + LED_FAN4, + LED_PSU, +}; + typedef enum psu_type { PSU_TYPE_UNKNOWN, PSU_TYPE_AC_F2B, diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c index ff753835..09975074 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c @@ -132,3 +132,67 @@ onlp_sysi_onie_info_get(onlp_onie_info_t* onie) return rv; } + +int +onlp_sysi_platform_manage_leds(void) +{ + int fan_number; + onlp_led_mode_t mode; + enum onlp_led_id fan_led_id[4] = { LED_FAN1, LED_FAN2, LED_FAN3, LED_FAN4 }; + + /* after reboot, status LED should blink green, SW set to solid green */ + onlp_ledi_mode_set(ONLP_OID_TYPE_CREATE(ONLP_OID_TYPE_LED,LED_SYSTEM), ONLP_LED_MODE_GREEN); + /* + * FAN Indicators + * + * Green - Fan is operating + * Red - No power or Fan failure + * Off - No power + * + */ + for( fan_number = 1; fan_number<= 8; fan_number+=2) + { + /* each 2 fans had same led_fan */ + onlp_fan_info_t fi; + /* check fan i */ + mode = ONLP_LED_MODE_GREEN; + if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number), &fi) < 0) { + mode = ONLP_LED_MODE_RED; + } + else if( (fi.status & 0x1) == 0) { + /* Not present */ + mode = ONLP_LED_MODE_RED; + } + else if(fi.status & ONLP_FAN_STATUS_FAILED) { + mode = ONLP_LED_MODE_RED; + } + else + { + if( fi.rpm < MIN_LIMIT_FRONT_FAN_RPM ) + { + mode = ONLP_LED_MODE_RED; + } + } + /* check fan i+1 */ + if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number+1), &fi) < 0) { + mode = ONLP_LED_MODE_RED; + } + else if( (fi.status & 0x1) == 0) { + /* Not present */ + mode = ONLP_LED_MODE_RED; + } + else if(fi.status & ONLP_FAN_STATUS_FAILED) { + mode = ONLP_LED_MODE_RED; + } + else + { + if( fi.rpm < MIN_LIMIT_REAR_FAN_RPM ) + { + mode = ONLP_LED_MODE_RED; + } + } + onlp_ledi_mode_set(ONLP_OID_TYPE_CREATE(ONLP_OID_TYPE_LED,fan_led_id[fan_number/2]), mode); + } + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c index bdc4d56a..38e6fa52 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c @@ -50,19 +50,6 @@ } \ } while(0) -/* LED related data - */ -enum onlp_led_id -{ - LED_RESERVED = 0, - LED_SYSTEM, - LED_FAN1, - LED_FAN2, - LED_FAN3, - LED_FAN4, - LED_PSU, -}; - typedef struct led_light_mode_map { enum onlp_led_id id; char* driver_led_mode; @@ -170,8 +157,11 @@ static onlp_led_info_t linfo[] = static int driver_to_onlp_led_mode(enum onlp_led_id id, char* driver_led_mode) { + char *pos; int i, nsize = sizeof(led_map)/sizeof(led_map[0]); + if ((pos=strchr(driver_led_mode, '\n')) != NULL) + *pos = '\0'; for (i = 0; i < nsize; i++) { if (id == led_map[i].id && diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h index 6169310f..43444b14 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h @@ -44,6 +44,22 @@ #define PSU_POWER_PREFIX "/bsp/power/psu%d_%s" #define IDPROM_PATH "/bsp/eeprom/%s%d_info" +#define MIN_LIMIT_FRONT_FAN_RPM 21000 +#define MIN_LIMIT_REAR_FAN_RPM 21000 + +/* LED related data + */ +enum onlp_led_id +{ + LED_RESERVED = 0, + LED_SYSTEM, + LED_FAN1, + LED_FAN2, + LED_FAN3, + LED_FAN4, + LED_PSU, +}; + typedef enum psu_type { PSU_TYPE_UNKNOWN, PSU_TYPE_AC_F2B, diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c index c9225e19..97407c63 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c @@ -133,3 +133,67 @@ onlp_sysi_onie_info_get(onlp_onie_info_t* onie) return rv; } + +int +onlp_sysi_platform_manage_leds(void) +{ + int fan_number; + onlp_led_mode_t mode; + enum onlp_led_id fan_led_id[4] = { LED_FAN1, LED_FAN2, LED_FAN3, LED_FAN4 }; + + /* after reboot, status LED should blink green, SW set to solid green */ + onlp_ledi_mode_set(ONLP_OID_TYPE_CREATE(ONLP_OID_TYPE_LED,LED_SYSTEM), ONLP_LED_MODE_GREEN); + /* + * FAN Indicators + * + * Green - Fan is operating + * Red - No power or Fan failure + * Off - No power + * + */ + for( fan_number = 1; fan_number<= 8; fan_number+=2) + { + /* each 2 fans had same led_fan */ + onlp_fan_info_t fi; + /* check fan i */ + mode = ONLP_LED_MODE_GREEN; + if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number), &fi) < 0) { + mode = ONLP_LED_MODE_RED; + } + else if( (fi.status & 0x1) == 0) { + /* Not present */ + mode = ONLP_LED_MODE_RED; + } + else if(fi.status & ONLP_FAN_STATUS_FAILED) { + mode = ONLP_LED_MODE_RED; + } + else + { + if( fi.rpm < MIN_LIMIT_FRONT_FAN_RPM ) + { + mode = ONLP_LED_MODE_RED; + } + } + /* check fan i+1 */ + if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number+1), &fi) < 0) { + mode = ONLP_LED_MODE_RED; + } + else if( (fi.status & 0x1) == 0) { + /* Not present */ + mode = ONLP_LED_MODE_RED; + } + else if(fi.status & ONLP_FAN_STATUS_FAILED) { + mode = ONLP_LED_MODE_RED; + } + else + { + if( fi.rpm < MIN_LIMIT_REAR_FAN_RPM ) + { + mode = ONLP_LED_MODE_RED; + } + } + onlp_ledi_mode_set(ONLP_OID_TYPE_CREATE(ONLP_OID_TYPE_LED,fan_led_id[fan_number/2]), mode); + } + return ONLP_STATUS_OK; +} + From 31d35bbbeba5d2efc913a0d4bae094775fcd80b6 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Sun, 4 Jun 2017 15:19:56 +0000 Subject: [PATCH 06/31] Add vendor dellemc. --- packages/platforms/dellemc/Makefile | 1 + packages/platforms/dellemc/vendor-config/Makefile | 1 + packages/platforms/dellemc/vendor-config/PKG.yml | 1 + .../dellemc/vendor-config/src/python/dellemc/__init__.py | 7 +++++++ 4 files changed, 10 insertions(+) create mode 100644 packages/platforms/dellemc/Makefile create mode 100644 packages/platforms/dellemc/vendor-config/Makefile create mode 100644 packages/platforms/dellemc/vendor-config/PKG.yml create mode 100644 packages/platforms/dellemc/vendor-config/src/python/dellemc/__init__.py diff --git a/packages/platforms/dellemc/Makefile b/packages/platforms/dellemc/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/dellemc/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/dellemc/vendor-config/Makefile b/packages/platforms/dellemc/vendor-config/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/dellemc/vendor-config/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/dellemc/vendor-config/PKG.yml b/packages/platforms/dellemc/vendor-config/PKG.yml new file mode 100644 index 00000000..971a145e --- /dev/null +++ b/packages/platforms/dellemc/vendor-config/PKG.yml @@ -0,0 +1 @@ +!include $ONL/packages/base/any/templates/platform-config-vendor.yml VENDOR=dellemc Vendor=DellEMC diff --git a/packages/platforms/dellemc/vendor-config/src/python/dellemc/__init__.py b/packages/platforms/dellemc/vendor-config/src/python/dellemc/__init__.py new file mode 100644 index 00000000..02e877ec --- /dev/null +++ b/packages/platforms/dellemc/vendor-config/src/python/dellemc/__init__.py @@ -0,0 +1,7 @@ +#!/usr/bin/python + +from onl.platform.base import * + +class OnlPlatformDellEMC(OnlPlatformBase): + MANUFACTURER='DellEMC' + PRIVATE_ENTERPRISE_NUMBER=674 From 682cf99e80a070b6308a76acefabfe812b545123 Mon Sep 17 00:00:00 2001 From: "Oleksandr Shamray oleksandrs@mellanox.com" Date: Mon, 5 Jun 2017 13:07:19 +0000 Subject: [PATCH 07/31] add API for read min_fan_speed. change define MIN_LIMIT_*_FAN_RPM to api call --- .../onlp/builds/src/module/src/fani.c | 11 +++++++++++ .../onlp/builds/src/module/src/platform_lib.h | 5 ++--- .../onlp/builds/src/module/src/sysi.c | 7 +++++-- .../onlp/builds/src/module/src/fani.c | 11 +++++++++++ .../onlp/builds/src/module/src/ledi.c | 3 +++ .../onlp/builds/src/module/src/platform_lib.h | 3 --- .../onlp/builds/src/module/src/sysi.c | 7 +++++-- 7 files changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/fani.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/fani.c index a1e23036..289a0ef1 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/fani.c @@ -534,3 +534,14 @@ onlp_fani_ioctl(onlp_oid_t id, va_list vargs) return ONLP_STATUS_E_UNSUPPORTED; } +int +onlp_fani_get_min_rpm(int id) +{ + int len = 0, nbytes = 10; + char r_data[10] = {0}; + char fullpath[65] = {0}; + + snprintf(fullpath, sizeof(fullpath), "%s%s", PREFIX_PATH, fan_path[id].min); + OPEN_READ_FILE(fullpath, r_data, nbytes, len); + return atoi(r_data); +} diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h index 5e3060dc..3992e357 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/platform_lib.h @@ -42,9 +42,6 @@ #define PSU_POWER_PREFIX "/bsp/power/psu%d_%s" #define IDPROM_PATH "/bsp/eeprom/%s%d_info" -#define MIN_LIMIT_FRONT_FAN_RPM 21000 -#define MIN_LIMIT_REAR_FAN_RPM 21000 - /* LED related data */ enum onlp_led_id @@ -69,4 +66,6 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len); int psu_read_eeprom(int psu_index, onlp_psu_info_t* psu_info, onlp_fan_info_t* fan_info); +int onlp_fani_get_min_rpm(int id); + #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c index 09975074..801b4914 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c @@ -138,6 +138,7 @@ onlp_sysi_platform_manage_leds(void) { int fan_number; onlp_led_mode_t mode; + int min_fan_speed; enum onlp_led_id fan_led_id[4] = { LED_FAN1, LED_FAN2, LED_FAN3, LED_FAN4 }; /* after reboot, status LED should blink green, SW set to solid green */ @@ -168,7 +169,8 @@ onlp_sysi_platform_manage_leds(void) } else { - if( fi.rpm < MIN_LIMIT_FRONT_FAN_RPM ) + min_fan_speed = onlp_fani_get_min_rpm(fan_number); + if( fi.rpm < min_fan_speed) { mode = ONLP_LED_MODE_RED; } @@ -186,7 +188,8 @@ onlp_sysi_platform_manage_leds(void) } else { - if( fi.rpm < MIN_LIMIT_REAR_FAN_RPM ) + min_fan_speed = onlp_fani_get_min_rpm(fan_number+1); + if( fi.rpm < min_fan_speed) { mode = ONLP_LED_MODE_RED; } diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/fani.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/fani.c index c5840918..e15f7184 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/fani.c @@ -533,3 +533,14 @@ onlp_fani_ioctl(onlp_oid_t id, va_list vargs) return ONLP_STATUS_E_UNSUPPORTED; } +int +onlp_fani_get_min_rpm(int id) +{ + int len = 0, nbytes = 10; + char r_data[10] = {0}; + char fullpath[65] = {0}; + + snprintf(fullpath, sizeof(fullpath), "%s%s", PREFIX_PATH, fan_path[id].min); + OPEN_READ_FILE(fullpath, r_data, nbytes, len); + return atoi(r_data); +} diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c index 38e6fa52..dc96956a 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/ledi.c @@ -50,6 +50,9 @@ } \ } while(0) +/* LED related data + */ + typedef struct led_light_mode_map { enum onlp_led_id id; char* driver_led_mode; diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h index 43444b14..6aa8d164 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h @@ -44,9 +44,6 @@ #define PSU_POWER_PREFIX "/bsp/power/psu%d_%s" #define IDPROM_PATH "/bsp/eeprom/%s%d_info" -#define MIN_LIMIT_FRONT_FAN_RPM 21000 -#define MIN_LIMIT_REAR_FAN_RPM 21000 - /* LED related data */ enum onlp_led_id diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c index 97407c63..a952b4de 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c @@ -139,6 +139,7 @@ onlp_sysi_platform_manage_leds(void) { int fan_number; onlp_led_mode_t mode; + int min_fan_speed; enum onlp_led_id fan_led_id[4] = { LED_FAN1, LED_FAN2, LED_FAN3, LED_FAN4 }; /* after reboot, status LED should blink green, SW set to solid green */ @@ -169,7 +170,8 @@ onlp_sysi_platform_manage_leds(void) } else { - if( fi.rpm < MIN_LIMIT_FRONT_FAN_RPM ) + min_fan_speed = onlp_fani_get_min_rpm(fan_number); + if( fi.rpm < min_fan_speed) { mode = ONLP_LED_MODE_RED; } @@ -187,7 +189,8 @@ onlp_sysi_platform_manage_leds(void) } else { - if( fi.rpm < MIN_LIMIT_REAR_FAN_RPM ) + min_fan_speed = onlp_fani_get_min_rpm(fan_number+1); + if( fi.rpm < min_fan_speed) { mode = ONLP_LED_MODE_RED; } From 5f36520f5c0c532d2429d67f2820004abdfcf65f Mon Sep 17 00:00:00 2001 From: "Oleksandr Shamray oleksandrs@mellanox.com" Date: Wed, 7 Jun 2017 18:04:32 +0000 Subject: [PATCH 08/31] Add led mamanger for msn2100 system Change 'magic number' of FAN_COUNT to define General code cleunup --- .../onlp/builds/src/module/src/fani.c | 11 ++++ .../onlp/builds/src/module/src/ledi.c | 9 --- .../onlp/builds/src/module/src/platform_lib.h | 14 ++++ .../onlp/builds/src/module/src/sysi.c | 64 ++++++++++++++++++- .../onlp/builds/src/module/src/sysi.c | 4 +- .../onlp/builds/src/module/src/platform_lib.h | 4 +- .../onlp/builds/src/module/src/sysi.c | 2 +- 7 files changed, 91 insertions(+), 17 deletions(-) diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/fani.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/fani.c index 931d6b0d..281105ab 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/fani.c @@ -348,3 +348,14 @@ onlp_fani_ioctl(onlp_oid_t id, va_list vargs) return ONLP_STATUS_E_UNSUPPORTED; } +int +onlp_fani_get_min_rpm(int id) +{ + int len = 0, nbytes = 10; + char r_data[10] = {0}; + char fullpath[65] = {0}; + + snprintf(fullpath, sizeof(fullpath), "%s%s", PREFIX_PATH, fan_path[id].min); + OPEN_READ_FILE(fullpath, r_data, nbytes, len); + return atoi(r_data); +} diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c index 64087c84..04f52be5 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/ledi.c @@ -52,15 +52,6 @@ /* LED related data */ -enum onlp_led_id -{ - LED_RESERVED = 0, - LED_SYSTEM, - LED_FAN, - LED_PSU1, - LED_PSU2, - LED_UID -}; typedef struct led_light_mode_map { enum onlp_led_id id; diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/platform_lib.h index 863da59d..e364842e 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/platform_lib.h @@ -41,6 +41,18 @@ #define PSU_POWER_PREFIX "/bsp/power/psu%d_%s" #define IDPROM_PATH "/bsp/eeprom/%s%d_info" +/* LED related data + */ +enum onlp_led_id +{ + LED_RESERVED = 0, + LED_SYSTEM, + LED_FAN, + LED_PSU1, + LED_PSU2, + LED_UID +}; + typedef enum psu_type { PSU_TYPE_UNKNOWN, PSU_TYPE_AC_F2B, @@ -49,4 +61,6 @@ typedef enum psu_type { psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int onlp_fani_get_min_rpm(int id); + #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sysi.c index 621e6525..d294613d 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2100/onlp/builds/src/module/src/sysi.c @@ -108,9 +108,6 @@ onlp_sysi_oids_get(onlp_oid_t* table, int max) return 0; } -#include - - int onlp_sysi_onie_info_get(onlp_onie_info_t* onie) { @@ -125,3 +122,64 @@ onlp_sysi_onie_info_get(onlp_onie_info_t* onie) return rv; } + +int +onlp_sysi_platform_manage_leds(void) +{ + int fan_number; + onlp_led_mode_t mode; + int min_fan_speed; + enum onlp_led_id fan_led_id = LED_FAN; + + /* after reboot, status LED should blink green, SW set to solid green */ + onlp_ledi_mode_set(ONLP_OID_TYPE_CREATE(ONLP_OID_TYPE_LED,LED_SYSTEM), ONLP_LED_MODE_GREEN); + /* + * FAN Indicators + * + * Green - Fan is operating + * Red - No power or Fan failure + * Off - No power + * + */ + mode = ONLP_LED_MODE_GREEN; + + for( fan_number = 1; fan_number<= CHASSIS_FAN_COUNT; fan_number+=2) + { + /* each 2 fans had same led_fan */ + onlp_fan_info_t fi; + /* check fans */ + if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number), &fi) < 0) { + mode = ONLP_LED_MODE_RED; + } + else if(fi.status & ONLP_FAN_STATUS_FAILED) { + mode = ONLP_LED_MODE_RED; + } + else + { + min_fan_speed = onlp_fani_get_min_rpm(fan_number); + if( fi.rpm < min_fan_speed) + { + mode = ONLP_LED_MODE_RED; + } + } + /* check fan i+1 */ + if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number+1), &fi) < 0) { + mode = ONLP_LED_MODE_RED; + } + else if(fi.status & ONLP_FAN_STATUS_FAILED) { + mode = ONLP_LED_MODE_RED; + } + else + { + min_fan_speed = onlp_fani_get_min_rpm(fan_number+1); + if( fi.rpm < min_fan_speed) + { + mode = ONLP_LED_MODE_RED; + } + } + } + onlp_ledi_mode_set(ONLP_OID_TYPE_CREATE(ONLP_OID_TYPE_LED,fan_led_id), mode); + + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c index 801b4914..11b3b1b6 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2410/onlp/builds/src/module/src/sysi.c @@ -151,11 +151,11 @@ onlp_sysi_platform_manage_leds(void) * Off - No power * */ - for( fan_number = 1; fan_number<= 8; fan_number+=2) + for( fan_number = 1; fan_number <= CHASSIS_FAN_COUNT; fan_number+=2) { /* each 2 fans had same led_fan */ onlp_fan_info_t fi; - /* check fan i */ + /* check fans */ mode = ONLP_LED_MODE_GREEN; if(onlp_fani_info_get(ONLP_FAN_ID_CREATE(fan_number), &fi) < 0) { mode = ONLP_LED_MODE_RED; diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h index 6aa8d164..c5b368c0 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/platform_lib.h @@ -29,8 +29,6 @@ #include #include "x86_64_mlnx_msn2700_log.h" -// ./sm/infra/modules/AIM/module/inc/AIM/aim_log.h - #define CHASSIS_PSU_COUNT 2 #define CHASSIS_TOTAL_FAN_COUNT 10 #define CHASSIS_TOTAL_THERMAL_COUNT 8 @@ -68,4 +66,6 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len); int psu_read_eeprom(int psu_index, onlp_psu_info_t* psu_info, onlp_fan_info_t* fan_info); +int onlp_fani_get_min_rpm(int id); + #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c index a952b4de..af615b8c 100644 --- a/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c +++ b/packages/platforms/mellanox/x86-64/x86-64-mlnx-msn2700/onlp/builds/src/module/src/sysi.c @@ -152,7 +152,7 @@ onlp_sysi_platform_manage_leds(void) * Off - No power * */ - for( fan_number = 1; fan_number<= 8; fan_number+=2) + for( fan_number = 1; fan_number <= CHASSIS_FAN_COUNT; fan_number+=2) { /* each 2 fans had same led_fan */ onlp_fan_info_t fi; From d592cb9033e248b8eddf91315877f6e58517f9da Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Wed, 7 Jun 2017 19:31:34 +0000 Subject: [PATCH 09/31] Latest --- packages/platforms-closed | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/platforms-closed b/packages/platforms-closed index 341de848..c42683c1 160000 --- a/packages/platforms-closed +++ b/packages/platforms-closed @@ -1 +1 @@ -Subproject commit 341de848393f61fd0e5627337b3b7d3f465045c4 +Subproject commit c42683c1317cf662331a34a2a84b5879144f8a56 From 895cee32992156dd2d52767dc155f8738bd12e1f Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Fri, 9 Jun 2017 17:03:41 +0000 Subject: [PATCH 10/31] Move patchset to arm config area. --- .../3.2-lts/{ => configs/arm-iproc-all}/patches/Makefile.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_Kconfig.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_Makefile.patch | 0 .../arm-iproc-all}/patches/arch_arm_boot_compressed_head.S.patch | 0 .../patches/arch_arm_boot_dts_accton_as4610_54.dts.patch | 0 .../arm-iproc-all}/patches/arch_arm_boot_dts_dni_3448p.dts.patch | 0 .../arm-iproc-all}/patches/arch_arm_boot_dts_helix4.dtsi.patch | 0 .../arm-iproc-all}/patches/arch_arm_common_gic.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_configs_iproc_defconfig.patch | 0 .../arm-iproc-all}/patches/arch_arm_include_asm_bug.h.patch | 0 .../patches/arch_arm_include_asm_hardware_gic.h.patch | 0 .../arm-iproc-all}/patches/arch_arm_include_asm_pgtable.h.patch | 0 .../arm-iproc-all}/patches/arch_arm_include_asm_processor.h.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_entry-armv.S.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_entry-header.S.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_head.S.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_module.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_process.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_smp_scu.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_kernel_smp_twd.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_Kconfig.patch | 0 .../patches/arch_arm_mach-iproc_Makefile.boot.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_Makefile.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_board_bu.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_common.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_common.h.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_flash.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_idm.c.patch | 0 .../patches/arch_arm_mach-iproc_include_mach_io_map.h.patch | 0 .../patches/arch_arm_mach-iproc_include_mach_iproc_regs.h.patch | 0 .../patches/arch_arm_mach-iproc_include_mach_nand_iproc.h.patch | 0 .../patches/arch_arm_mach-iproc_include_mach_qspi_iproc.h.patch | 0 .../patches/arch_arm_mach-iproc_include_mach_reg_utils.h.patch | 0 .../arch_arm_mach-iproc_include_mach_socregs_ing_open.h.patch | 0 .../arch_arm_mach-iproc_include_mach_socregs_ns_open.h.patch | 0 .../arch_arm_mach-iproc_include_mach_socregs_nsp_open.h.patch | 0 .../arch_arm_mach-iproc_include_mach_socregs_p7_open.h.patch | 0 .../patches/arch_arm_mach-iproc_include_mach_vmalloc.h.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_io_map.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_localtimer.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_northstar.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_northstar.h.patch | 0 .../patches/arch_arm_mach-iproc_northstar_dmu.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mach-iproc_pm.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_mm_Kconfig.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_mm_init.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_mm_ioremap.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_mm_mm.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_mm_mmap.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_mm_mmu.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/arch_arm_mm_nommu.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_net_Makefile.patch | 0 .../arm-iproc-all}/patches/arch_arm_net_bpf_jit_32.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_net_bpf_jit_32.h.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_Kconfig.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_Makefile.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_bcm5301x.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_clock.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_headsmp.S.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_hotplug.c.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_brcm_rdb_rng.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_bridge-regs.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_clkdev.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_clock.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_common.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_debug-macro.S.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_entry-macro.S.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_gpio.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_hardware.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_io.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_iproc.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_iproc_timer.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_irqs.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_lm.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_memory.h.patch | 0 .../arch_arm_plat-iproc_include_mach_sdio_platform.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_smp.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_system.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_timer.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_timex.h.patch | 0 .../patches/arch_arm_plat-iproc_include_mach_uncompress.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_dma-pl330.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_dma_drv.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_dmux.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_osdal_os.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_shm.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_spi_iproc.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_swreset_rec.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_timer-sp.h.patch | 0 .../patches/arch_arm_plat-iproc_include_plat_types.h.patch | 0 .../patches/arch_arm_plat-iproc_iproc-cache.S.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_iproc_cru.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_irq.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_lm.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_localtimer.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_platsmp.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_shm.c.patch | 0 .../patches/arch_arm_plat-iproc_swreset_rec.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_sysfs.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_timer-sp.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_plat-iproc_timer.c.patch | 0 .../arm-iproc-all}/patches/arch_arm_tools_mach-types.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_Kconfig.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_base_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_base_Makefile.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_base.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_bus.c.patch | 0 .../arm-iproc-all}/patches/drivers_base_class.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_core.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_cpu.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_init.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_node.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_base_sys.c.patch | 0 .../arm-iproc-all}/patches/drivers_base_topology.c.patch | 0 .../arm-iproc-all}/patches/drivers_bcma_host_pci.c.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_Makefile.patch | 0 .../patches/drivers_bcmdrivers_dma_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_dma_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_dma_Makefile.patch | 0 .../patches/drivers_bcmdrivers_dma_dma-pl330.h.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_dma_dma.c.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_dma_dma_drv.h.patch | 0 .../patches/drivers_bcmdrivers_dma_pl330-pdata.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_et_.gitignore.patch | 0 .../patches/drivers_bcmdrivers_gmac_et_Kconfig.patch | 0 .../patches/drivers_bcmdrivers_gmac_et_Makefile.patch | 0 .../patches/drivers_bcmdrivers_gmac_hnd_.gitignore.patch | 0 .../patches/drivers_bcmdrivers_gmac_hnd_Kconfig.patch | 0 .../patches/drivers_bcmdrivers_gmac_hnd_Makefile.patch | 0 .../patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.sh.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_.gitignore.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_et_cfg.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_et_dbg.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_et_export.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_etc.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_etc.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_Makefile.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_aidmp.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_arminc.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcm_cfg.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcm_mpool_pub.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmcdc.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmdefs.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmdevs.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmendian.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmenetmib.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmenetphy.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmenetrxh.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmgmacmib.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmgmacrxh.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmiproc_phy.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5221.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5461s.h.patch | 0 ...ivers_bcmdrivers_gmac_src_include_bcmiproc_robo_serdes.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes.h.patch | 0 ...rivers_bcmdrivers_gmac_src_include_bcmiproc_serdes_def.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmnvram.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmotp.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmparams.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmperf.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmrobo.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmsdh.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmsdpcm.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmsrom.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmsrom_fmt.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_bcmsrom_tbl.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmstdlib.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmutils.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_bcmwifi.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_compvers.sh.patch | 0 .../drivers_bcmdrivers_gmac_src_include_ctf_ctf_cfg.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_ctf_hndctf.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_epivers.h.in.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_epivers.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_epivers.sh.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_etioctl.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_gmac_common.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_gmac_core.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hndarm.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hndchipc.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hndcpu.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hnddma.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hndfwd.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hndsoc.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_hndtcam.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_linux_osl.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_linuxver.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_osl.h.patch | 0 ...drivers_bcmdrivers_gmac_src_include_packed_section_end.h.patch | 0 ...ivers_bcmdrivers_gmac_src_include_packed_section_start.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_pcicfg.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_802.11.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_802.1d.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_proto_BOM.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_Makefile.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_bcmeth.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_bcmevent.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_bcmip.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_bcmipv6.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_ethernet.h.patch | 0 .../drivers_bcmdrivers_gmac_src_include_proto_vlan.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_proto_wpa.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_sbchipc.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_sbconfig.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_sbhndarm.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_sbhnddma.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_sbsocram.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_siutils.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_trxhdr.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_typedefs.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_include_wlioctl.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_aiutils.c.patch | 0 .../drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5221.c.patch | 0 .../drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5461s.c.patch | 0 ...rivers_bcmdrivers_gmac_src_shared_bcmiproc_robo_serdes.c.patch | 0 .../drivers_bcmdrivers_gmac_src_shared_bcmiproc_serdes.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_bcmotp.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_bcmrobo.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_bcmsrom.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_bcmutils.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_hnddma.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_hndfwd.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_linux_osl.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_nvramstubs.c.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_siutils.c.patch | 0 .../drivers_bcmdrivers_gmac_src_shared_siutils_priv.h.patch | 0 .../patches/drivers_bcmdrivers_gmac_src_shared_wl_config.patch | 0 .../patches/drivers_bcmdrivers_gpio_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_gpio_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_gpio_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpio.c.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpio.h.patch | 0 .../patches/drivers_bcmdrivers_gpio_gpio_cfg.c.patch | 0 .../patches/drivers_bcmdrivers_gpio_gpio_cfg.h.patch | 0 .../patches/drivers_bcmdrivers_gpio_gpiolib.c.patch | 0 .../patches/drivers_bcmdrivers_include_Readme.txt.patch | 0 .../patches/drivers_bcmdrivers_mdio_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_mdio_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_mdio_Makefile.patch | 0 .../patches/drivers_bcmdrivers_mdio_iproc_mdio.c.patch | 0 .../patches/drivers_bcmdrivers_mdio_iproc_mdio.h.patch | 0 .../patches/drivers_bcmdrivers_mdio_iproc_mdio_dev.h.patch | 0 .../patches/drivers_bcmdrivers_nand_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_nand_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_nand_Makefile.patch | 0 .../patches/drivers_bcmdrivers_nand_nand_iproc.c.patch | 0 .../patches/drivers_bcmdrivers_pmu_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_pmu_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_pmu_Makefile.patch | 0 .../patches/drivers_bcmdrivers_pmu_iproc-pmu.c.patch | 0 .../patches/drivers_bcmdrivers_pwm_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_pwm_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_pwm_Makefile.patch | 0 .../patches/drivers_bcmdrivers_pwm_iproc_pwmc.c.patch | 0 .../patches/drivers_bcmdrivers_pwm_iproc_pwmc_3x.c.patch | 0 .../patches/drivers_bcmdrivers_qspi_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_qspi_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_qspi_Makefile.patch | 0 .../patches/drivers_bcmdrivers_qspi_qspi_iproc.c.patch | 0 .../patches/drivers_bcmdrivers_smbus_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_smbus_Kconfig.patch | 0 .../patches/drivers_bcmdrivers_smbus_Makefile.patch | 0 .../patches/drivers_bcmdrivers_smbus_iproc_smbus.c.patch | 0 .../patches/drivers_bcmdrivers_smbus_iproc_smbus.h.patch | 0 .../patches/drivers_bcmdrivers_smbus_iproc_smbus_defs.h.patch | 0 .../patches/drivers_bcmdrivers_smbus_iproc_smbus_regs.h.patch | 0 .../patches/drivers_bcmdrivers_timer_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_timer_Kconfig.patch | 0 .../patches/drivers_bcmdrivers_timer_Makefile.patch | 0 .../patches/drivers_bcmdrivers_timer_iproc_timer.c.patch | 0 .../patches/drivers_bcmdrivers_timer_iproc_timer.h.patch | 0 .../patches/drivers_bcmdrivers_usb2h_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_Kconfig.patch | 0 .../patches/drivers_bcmdrivers_usb2h_Makefile.patch | 0 .../patches/drivers_bcmdrivers_usb2h_bcm-iproc.c.patch | 0 .../patches/drivers_bcmdrivers_usb2h_bcm_usbh.h.patch | 0 .../patches/drivers_bcmdrivers_usb2h_ehci-bcm.c.patch | 0 .../patches/drivers_bcmdrivers_usb2h_ohci-bcm.c.patch | 0 .../patches/drivers_bcmdrivers_usb2h_usbh_cfg.h.patch | 0 .../patches/drivers_bcmdrivers_wdt_.gitignore.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_wdt_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_bcmdrivers_wdt_Makefile.patch | 0 .../patches/drivers_bcmdrivers_wdt_iproc_wdt.c.patch | 0 .../arm-iproc-all}/patches/drivers_cpuidle_cpuidle.c.patch | 0 .../arm-iproc-all}/patches/drivers_cpuidle_cpuidle.h.patch | 0 .../arm-iproc-all}/patches/drivers_cpuidle_sysfs.c.patch | 0 .../arm-iproc-all}/patches/drivers_crypto_padlock-aes.c.patch | 0 .../arm-iproc-all}/patches/drivers_crypto_padlock-sha.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_dma_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_dma_imx-sdma.c.patch | 0 .../arm-iproc-all}/patches/drivers_gpio_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_gpio_gpio-mpc8xxx.c.patch | 0 .../arm-iproc-all}/patches/drivers_gpio_gpio-pca953x.c.patch | 0 .../arm-iproc-all}/patches/drivers_gpio_gpio-sch.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_adt7470.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_adt7475.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_coretemp.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_cy8c3245r1.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_cy8cxx.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_emc2305.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_it87.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_max6620.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_max6639.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_max6697.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_cpr4011.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_dps460.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_pmbus.h.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_pmbus_core.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_pmbus_ps2471.c.patch | 0 .../arm-iproc-all}/patches/drivers_hwmon_via-cputemp.c.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_busses_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_busses_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_i2c-mux.c.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_muxes_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_muxes_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_muxes_gpio-i2cmux.c.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_muxes_pca9541.c.patch | 0 .../arm-iproc-all}/patches/drivers_i2c_muxes_pca954x.c.patch | 0 .../arm-iproc-all}/patches/drivers_misc_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_misc_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_misc_ds100df410.c.patch | 0 .../arm-iproc-all}/patches/drivers_misc_early_dma_alloc.c.patch | 0 .../arm-iproc-all}/patches/drivers_misc_eeprom_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_misc_eeprom_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_misc_eeprom_at24.c.patch | 0 .../patches/drivers_misc_eeprom_eeprom_class.c.patch | 0 .../patches/drivers_misc_eeprom_sff_8436_eeprom.c.patch | 0 .../patches/drivers_misc_iwmc3200top_fw-download.c.patch | 0 .../arm-iproc-all}/patches/drivers_misc_retimer_class.c.patch | 0 .../arm-iproc-all}/patches/drivers_misc_ti-st_st_kim.c.patch | 0 .../arm-iproc-all}/patches/drivers_mtd_chips_Kconfig.patch | 0 .../patches/drivers_mtd_chips_cfi_cmdset_0020.c.patch | 0 .../arm-iproc-all}/patches/drivers_mtd_devices_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_mtd_devices_m25p80.c.patch | 0 .../arm-iproc-all}/patches/drivers_mtd_maps_physmap_of.c.patch | 0 .../arm-iproc-all}/patches/drivers_mtd_mtdoops.c.patch | 0 .../arm-iproc-all}/patches/drivers_mtd_ubi_build.c.patch | 0 .../arm-iproc-all}/patches/drivers_net_Makefile.patch | 0 .../patches/drivers_net_can_softing_softing_fw.c.patch | 0 .../patches/drivers_net_ethernet_broadcom_bnx2.c.patch | 0 .../patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_cmn.c.patch | 0 .../drivers_net_ethernet_broadcom_bnx2x_bnx2x_ethtool.c.patch | 0 .../drivers_net_ethernet_broadcom_bnx2x_bnx2x_main.c.patch | 0 .../patches/drivers_net_ethernet_broadcom_tg3.c.patch | 0 .../arm-iproc-all}/patches/drivers_net_phy_mdio_bus.c.patch | 0 .../arm-iproc-all}/patches/drivers_net_phy_phy.c.patch | 0 .../arm-iproc-all}/patches/drivers_net_phy_phy_device.c.patch | 0 .../arm-iproc-all}/patches/drivers_of_of_mdio.c.patch | 0 .../arm-iproc-all}/patches/drivers_of_platform.c.patch | 0 .../arm-iproc-all}/patches/drivers_pci_access.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_pci_msi.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_pci_pci.c.patch | 0 .../arm-iproc-all}/patches/drivers_pci_pcie_aspm.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_pci_probe.c.patch | 0 .../arm-iproc-all}/patches/drivers_pci_quirks.c.patch | 0 .../arm-iproc-all}/patches/drivers_pci_setup-res.c.patch | 0 .../arm-iproc-all}/patches/drivers_rtc_hctosys.c.patch | 0 .../arm-iproc-all}/patches/drivers_rtc_rtc-m41t80.c.patch | 0 .../arm-iproc-all}/patches/drivers_rtc_rtc-mv.c.patch | 0 .../arm-iproc-all}/patches/drivers_rtc_rtc-s35390a.c.patch | 0 .../arm-iproc-all}/patches/drivers_tty_cyclades.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/drivers_tty_moxa.c.patch | 0 .../arm-iproc-all}/patches/drivers_tty_serial_icom.c.patch | 0 .../arm-iproc-all}/patches/drivers_tty_serial_ucc_uart.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_host_ehci-hcd.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_host_ehci-hub.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_host_ohci-hcd.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_misc_emi26.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_misc_emi62.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_serial_io_edgeport.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_serial_io_ti.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_serial_keyspan.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_serial_keyspan_pda.c.patch | 0 .../patches/drivers_usb_serial_ti_usb_3410_5052.c.patch | 0 .../arm-iproc-all}/patches/drivers_usb_serial_whiteheat.c.patch | 0 .../arm-iproc-all}/patches/drivers_watchdog_Kconfig.patch | 0 .../arm-iproc-all}/patches/drivers_watchdog_Makefile.patch | 0 .../arm-iproc-all}/patches/drivers_watchdog_booke_wdt.c.patch | 0 .../arm-iproc-all}/patches/drivers_watchdog_iTCO_wdt.c.patch | 0 .../arm-iproc-all}/patches/drivers_watchdog_ie6xx_wdt.c.patch | 0 .../arm-iproc-all}/patches/drivers_watchdog_sp5100_tco.c.patch | 0 .../kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/foopatch | 0 .../patches/include_asm-generic_io-64-nonatomic-hi-lo.h.patch | 0 .../patches/include_asm-generic_io-64-nonatomic-lo-hi.h.patch | 0 .../arm-iproc-all}/patches/include_linux_amba_bus.h.patch | 0 .../arm-iproc-all}/patches/include_linux_audit.h.patch | 0 .../arm-iproc-all}/patches/include_linux_bitops.h.patch | 0 .../arm-iproc-all}/patches/include_linux_ceph_messenger.h.patch | 0 .../arm-iproc-all}/patches/include_linux_connector.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_cpu.h.patch | 0 .../arm-iproc-all}/patches/include_linux_dcache.h.patch | 0 .../arm-iproc-all}/patches/include_linux_device-mapper.h.patch | 0 .../arm-iproc-all}/patches/include_linux_device.h.patch | 0 .../arm-iproc-all}/patches/include_linux_dma-mapping.h.patch | 0 .../arm-iproc-all}/patches/include_linux_dmaengine.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_dmi.h.patch | 0 .../patches/include_linux_dynamic_queue_limits.h.patch | 0 .../arm-iproc-all}/patches/include_linux_early_dma_alloc.h.patch | 0 .../arm-iproc-all}/patches/include_linux_eeprom_class.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_efi.h.patch | 0 .../arm-iproc-all}/patches/include_linux_ethtool.h.patch | 0 .../arm-iproc-all}/patches/include_linux_ftrace_event.h.patch | 0 .../arm-iproc-all}/patches/include_linux_hashtable.h.patch | 0 .../arm-iproc-all}/patches/include_linux_i2c-mux-gpio.h.patch | 0 .../arm-iproc-all}/patches/include_linux_i2c-mux.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_i2c.h.patch | 0 .../arm-iproc-all}/patches/include_linux_i2c_at24.h.patch | 0 .../arm-iproc-all}/patches/include_linux_i2c_pca953x.h.patch | 0 .../arm-iproc-all}/patches/include_linux_i2c_sff-8436.h.patch | 0 .../arm-iproc-all}/patches/include_linux_if_bridge.h.patch | 0 .../arm-iproc-all}/patches/include_linux_if_ether.h.patch | 0 .../arm-iproc-all}/patches/include_linux_if_link.h.patch | 0 .../arm-iproc-all}/patches/include_linux_if_tun.h.patch | 0 .../arm-iproc-all}/patches/include_linux_init.h.patch | 0 .../arm-iproc-all}/patches/include_linux_irqdesc.h.patch | 0 .../arm-iproc-all}/patches/include_linux_jbd2.h.patch | 0 .../arm-iproc-all}/patches/include_linux_jiffies.h.patch | 0 .../arm-iproc-all}/patches/include_linux_kvm_host.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mdio.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_mii.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mm_types.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mod_devicetable.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mroute.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_msi.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mtd_cfi.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mtd_cfi_endian.h.patch | 0 .../arm-iproc-all}/patches/include_linux_mtd_map.h.patch | 0 .../arm-iproc-all}/patches/include_linux_neighbour.h.patch | 0 .../arm-iproc-all}/patches/include_linux_of_mdio.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_pci.h.patch | 0 .../arm-iproc-all}/patches/include_linux_pci_ids.h.patch | 0 .../arm-iproc-all}/patches/include_linux_pci_regs.h.patch | 0 .../arm-iproc-all}/patches/include_linux_percpu.h.patch | 0 .../arm-iproc-all}/patches/include_linux_perf_event.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_phy.h.patch | 0 .../arm-iproc-all}/patches/include_linux_pid_namespace.h.patch | 0 .../arm-iproc-all}/patches/include_linux_pkt_sched.h.patch | 0 .../patches/include_linux_platform_data_max6697.h.patch | 0 .../arm-iproc-all}/patches/include_linux_platform_device.h.patch | 0 .../arm-iproc-all}/patches/include_linux_port.h.patch | 0 .../arm-iproc-all}/patches/include_linux_pps_kernel.h.patch | 0 .../arm-iproc-all}/patches/include_linux_ptrace.h.patch | 0 .../arm-iproc-all}/patches/include_linux_random.h.patch | 0 .../patches/include_linux_regulator_consumer.h.patch | 0 .../arm-iproc-all}/patches/include_linux_retimer_class.h.patch | 0 .../arm-iproc-all}/patches/include_linux_rmap.h.patch | 0 .../arm-iproc-all}/patches/include_linux_skbuff.h.patch | 0 .../arm-iproc-all}/patches/include_linux_slab_def.h.patch | 0 .../arm-iproc-all}/patches/include_linux_snmp.h.patch | 0 .../arm-iproc-all}/patches/include_linux_swiotlb.h.patch | 0 .../arm-iproc-all}/patches/include_linux_sysctl.h.patch | 0 .../arm-iproc-all}/patches/include_linux_sysfs.h.patch | 0 .../arm-iproc-all}/patches/include_linux_sysrq.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_tcp.h.patch | 0 .../arm-iproc-all}/patches/include_linux_u64_stats_sync.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/include_linux_usb.h.patch | 0 .../arm-iproc-all}/patches/include_linux_usb_ehci_def.h.patch | 0 .../arm-iproc-all}/patches/include_linux_usb_hcd.h.patch | 0 .../arm-iproc-all}/patches/include_linux_vmalloc.h.patch | 0 .../arm-iproc-all}/patches/include_linux_watchdog.h.patch | 0 .../arm-iproc-all}/patches/include_trace_syscall.h.patch | 0 .../{ => configs/arm-iproc-all}/patches/init_Kconfig.patch | 0 .../arm-iproc-all}/patches/kernel-fs-overlayfs-inode.patch | 0 .../arm-iproc-all}/patches/kernel-overlayfs-v11.patch | 0 .../{ => configs/arm-iproc-all}/patches/lib_Kconfig.debug.patch | 0 .../3.2-lts/{ => configs/arm-iproc-all}/patches/lib_Kconfig.patch | 0 .../{ => configs/arm-iproc-all}/patches/lib_Makefile.patch | 0 .../arm-iproc-all}/patches/lib_dynamic_queue_limits.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/lib_nlattr.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/lib_swiotlb.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/mm_backing-dev.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/mm_memcontrol.c.patch | 0 .../3.2-lts/{ => configs/arm-iproc-all}/patches/mm_rmap.c.patch | 0 .../3.2-lts/{ => configs/arm-iproc-all}/patches/mm_slab.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/mm_sparse-vmemmap.c.patch | 0 .../3.2-lts/{ => configs/arm-iproc-all}/patches/mm_swap.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/mm_truncate.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/mm_vmalloc.c.patch | 0 .../3.2-lts/{ => configs/arm-iproc-all}/patches/mm_vmscan.c.patch | 0 .../{ => configs/arm-iproc-all}/patches/overlayfs_notify.patch | 0 .../patches/platform-accton-as4610-device-drivers.patch | 0 .../arm-iproc-all}/patches/scripts_Makefile.fwinst.patch | 0 .../arm-iproc-all}/patches/scripts_kconfig_conf.c.patch | 0 .../arm-iproc-all}/patches/scripts_kconfig_confdata.c.patch | 0 .../arm-iproc-all}/patches/scripts_kconfig_expr.h.patch | 0 .../arm-iproc-all}/patches/scripts_kconfig_lkc_proto.h.patch | 0 .../arm-iproc-all}/patches/scripts_mod_file2alias.c.patch | 0 .../arm-iproc-all}/patches/scripts_package_Makefile.patch | 0 .../kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/series | 0 .../patches/tools_include_tools_be_byteshift.h.patch | 0 .../patches/tools_include_tools_le_byteshift.h.patch | 0 510 files changed, 0 insertions(+), 0 deletions(-) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_boot_compressed_head.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_boot_dts_accton_as4610_54.dts.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_boot_dts_dni_3448p.dts.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_boot_dts_helix4.dtsi.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_common_gic.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_configs_iproc_defconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_include_asm_bug.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_include_asm_hardware_gic.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_include_asm_pgtable.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_include_asm_processor.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_entry-armv.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_entry-header.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_head.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_module.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_process.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_smp_scu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_kernel_smp_twd.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_Makefile.boot.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_board_bu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_common.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_common.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_flash.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_idm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_io_map.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_iproc_regs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_nand_iproc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_qspi_iproc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_reg_utils.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_socregs_ing_open.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_socregs_ns_open.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_socregs_nsp_open.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_socregs_p7_open.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_include_mach_vmalloc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_io_map.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_localtimer.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_northstar.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_northstar.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_northstar_dmu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mach-iproc_pm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_init.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_ioremap.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_mm.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_mmap.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_mmu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_mm_nommu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_net_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_net_bpf_jit_32.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_net_bpf_jit_32.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_bcm5301x.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_clock.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_headsmp.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_hotplug.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_brcm_rdb_rng.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_bridge-regs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_clkdev.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_clock.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_common.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_debug-macro.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_entry-macro.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_gpio.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_hardware.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_io.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_iproc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_iproc_timer.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_irqs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_lm.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_memory.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_sdio_platform.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_smp.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_system.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_timer.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_timex.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_mach_uncompress.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_dma-pl330.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_dma_drv.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_dmux.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_osdal_os.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_shm.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_spi_iproc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_swreset_rec.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_timer-sp.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_include_plat_types.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_iproc-cache.S.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_iproc_cru.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_irq.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_lm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_localtimer.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_platsmp.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_shm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_swreset_rec.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_sysfs.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_timer-sp.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_plat-iproc_timer.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/arch_arm_tools_mach-types.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_base.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_bus.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_class.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_core.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_cpu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_init.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_node.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_sys.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_base_topology.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcma_host_pci.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_dma-pl330.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_dma.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_dma_drv.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_dma_pl330-pdata.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_et_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_et_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_et_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_hnd_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_hnd_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_hnd_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.sh.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_et_cfg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_et_dbg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_et_export.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_aidmp.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_arminc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcm_cfg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcm_mpool_pub.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmcdc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmdefs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmdevs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmendian.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmenetmib.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmenetphy.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmenetrxh.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacmib.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacrxh.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5221.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5461s.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_robo_serdes.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes_def.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmnvram.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmotp.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmparams.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmperf.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmrobo.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmsdh.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmsdpcm.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_fmt.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_tbl.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmstdlib.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmutils.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_bcmwifi.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_compvers.sh.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_ctf_ctf_cfg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_ctf_hndctf.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.in.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_epivers.sh.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_etioctl.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_gmac_common.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_gmac_core.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hndarm.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hndchipc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hndcpu.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hnddma.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hndfwd.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hndsoc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_hndtcam.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_linux_osl.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_linuxver.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_osl.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_packed_section_end.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_packed_section_start.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_pcicfg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_802.11.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_802.1d.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_BOM.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmeth.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmevent.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmip.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmipv6.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_ethernet.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_vlan.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_proto_wpa.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_sbchipc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_sbconfig.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_sbhndarm.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_sbhnddma.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_sbsocram.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_siutils.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_trxhdr.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_typedefs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_include_wlioctl.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_aiutils.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5221.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5461s.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_robo_serdes.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_serdes.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmotp.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmrobo.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmsrom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_bcmutils.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_hnddma.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_hndfwd.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_linux_osl.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_nvramstubs.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_siutils.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_siutils_priv.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gmac_src_shared_wl_config.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpio.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpio.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpio_cfg.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpio_cfg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_gpio_gpiolib.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_include_Readme.txt.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_mdio_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_mdio_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_mdio_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_mdio_iproc_mdio.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_mdio_iproc_mdio.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_mdio_iproc_mdio_dev.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_nand_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_nand_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_nand_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_nand_nand_iproc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pmu_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pmu_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pmu_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pmu_iproc-pmu.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pwm_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pwm_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pwm_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pwm_iproc_pwmc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_pwm_iproc_pwmc_3x.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_qspi_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_qspi_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_qspi_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_qspi_qspi_iproc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_iproc_smbus.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_iproc_smbus.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_iproc_smbus_defs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_smbus_iproc_smbus_regs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_timer_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_timer_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_timer_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_timer_iproc_timer.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_timer_iproc_timer.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_bcm-iproc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_bcm_usbh.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_ehci-bcm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_ohci-bcm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_usb2h_usbh_cfg.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_wdt_.gitignore.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_wdt_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_wdt_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_bcmdrivers_wdt_iproc_wdt.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_cpuidle_cpuidle.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_cpuidle_cpuidle.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_cpuidle_sysfs.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_crypto_padlock-aes.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_crypto_padlock-sha.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_dma_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_dma_imx-sdma.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_gpio_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_gpio_gpio-mpc8xxx.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_gpio_gpio-pca953x.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_gpio_gpio-sch.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_adt7470.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_adt7475.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_coretemp.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_cy8c3245r1.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_cy8cxx.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_emc2305.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_it87.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_max6620.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_max6639.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_max6697.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_cpr4011.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_dps460.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_pmbus.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_pmbus_core.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_pmbus_ps2471.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_hwmon_via-cputemp.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_busses_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_busses_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_i2c-mux.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_muxes_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_muxes_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_muxes_gpio-i2cmux.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_muxes_pca9541.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_i2c_muxes_pca954x.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_ds100df410.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_early_dma_alloc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_eeprom_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_eeprom_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_eeprom_at24.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_eeprom_eeprom_class.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_eeprom_sff_8436_eeprom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_iwmc3200top_fw-download.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_retimer_class.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_misc_ti-st_st_kim.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_chips_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_chips_cfi_cmdset_0020.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_devices_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_devices_m25p80.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_maps_physmap_of.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_mtdoops.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_mtd_ubi_build.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_can_softing_softing_fw.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_ethernet_broadcom_bnx2.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_cmn.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_ethtool.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_main.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_ethernet_broadcom_tg3.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_phy_mdio_bus.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_phy_phy.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_net_phy_phy_device.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_of_of_mdio.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_of_platform.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_access.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_msi.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_pci.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_pcie_aspm.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_probe.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_quirks.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_pci_setup-res.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_rtc_hctosys.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_rtc_rtc-m41t80.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_rtc_rtc-mv.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_rtc_rtc-s35390a.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_tty_cyclades.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_tty_moxa.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_tty_serial_icom.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_tty_serial_ucc_uart.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_host_ehci-hcd.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_host_ehci-hub.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_host_ohci-hcd.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_misc_emi26.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_misc_emi62.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_serial_io_edgeport.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_serial_io_ti.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_serial_keyspan.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_serial_keyspan_pda.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_serial_ti_usb_3410_5052.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_usb_serial_whiteheat.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_watchdog_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_watchdog_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_watchdog_booke_wdt.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_watchdog_iTCO_wdt.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_watchdog_ie6xx_wdt.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/drivers_watchdog_sp5100_tco.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/foopatch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_asm-generic_io-64-nonatomic-hi-lo.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_asm-generic_io-64-nonatomic-lo-hi.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_amba_bus.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_audit.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_bitops.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_ceph_messenger.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_connector.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_cpu.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_dcache.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_device-mapper.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_device.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_dma-mapping.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_dmaengine.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_dmi.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_dynamic_queue_limits.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_early_dma_alloc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_eeprom_class.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_efi.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_ethtool.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_ftrace_event.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_hashtable.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_i2c-mux-gpio.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_i2c-mux.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_i2c.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_i2c_at24.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_i2c_pca953x.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_i2c_sff-8436.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_if_bridge.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_if_ether.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_if_link.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_if_tun.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_init.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_irqdesc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_jbd2.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_jiffies.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_kvm_host.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mdio.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mii.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mm_types.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mod_devicetable.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mroute.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_msi.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mtd_cfi.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mtd_cfi_endian.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_mtd_map.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_neighbour.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_of_mdio.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_pci.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_pci_ids.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_pci_regs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_percpu.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_perf_event.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_phy.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_pid_namespace.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_pkt_sched.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_platform_data_max6697.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_platform_device.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_port.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_pps_kernel.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_ptrace.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_random.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_regulator_consumer.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_retimer_class.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_rmap.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_skbuff.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_slab_def.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_snmp.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_swiotlb.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_sysctl.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_sysfs.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_sysrq.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_tcp.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_u64_stats_sync.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_usb.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_usb_ehci_def.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_usb_hcd.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_vmalloc.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_linux_watchdog.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/include_trace_syscall.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/init_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/kernel-fs-overlayfs-inode.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/kernel-overlayfs-v11.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/lib_Kconfig.debug.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/lib_Kconfig.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/lib_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/lib_dynamic_queue_limits.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/lib_nlattr.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/lib_swiotlb.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_backing-dev.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_memcontrol.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_rmap.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_slab.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_sparse-vmemmap.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_swap.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_truncate.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_vmalloc.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/mm_vmscan.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/overlayfs_notify.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/platform-accton-as4610-device-drivers.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_Makefile.fwinst.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_kconfig_conf.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_kconfig_confdata.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_kconfig_expr.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_kconfig_lkc_proto.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_mod_file2alias.c.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/scripts_package_Makefile.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/series (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/tools_include_tools_be_byteshift.h.patch (100%) rename packages/base/any/kernels/3.2-lts/{ => configs/arm-iproc-all}/patches/tools_include_tools_le_byteshift.h.patch (100%) diff --git a/packages/base/any/kernels/3.2-lts/patches/Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_compressed_head.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_compressed_head.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_compressed_head.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_compressed_head.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_dts_accton_as4610_54.dts.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_dts_accton_as4610_54.dts.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_dts_accton_as4610_54.dts.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_dts_accton_as4610_54.dts.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_dts_dni_3448p.dts.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_dts_dni_3448p.dts.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_dts_dni_3448p.dts.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_dts_dni_3448p.dts.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_dts_helix4.dtsi.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_dts_helix4.dtsi.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_boot_dts_helix4.dtsi.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_boot_dts_helix4.dtsi.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_common_gic.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_common_gic.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_common_gic.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_common_gic.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_configs_iproc_defconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_configs_iproc_defconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_configs_iproc_defconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_configs_iproc_defconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_bug.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_bug.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_bug.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_bug.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_hardware_gic.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_hardware_gic.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_hardware_gic.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_hardware_gic.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_pgtable.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_pgtable.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_pgtable.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_pgtable.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_processor.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_processor.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_include_asm_processor.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_include_asm_processor.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_entry-armv.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_entry-armv.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_entry-armv.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_entry-armv.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_entry-header.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_entry-header.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_entry-header.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_entry-header.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_head.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_head.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_head.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_head.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_module.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_module.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_module.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_module.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_process.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_process.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_process.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_process.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_smp_scu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_smp_scu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_smp_scu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_smp_scu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_smp_twd.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_smp_twd.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_kernel_smp_twd.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_kernel_smp_twd.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_Makefile.boot.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_Makefile.boot.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_Makefile.boot.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_Makefile.boot.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_board_bu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_board_bu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_board_bu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_board_bu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_common.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_common.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_common.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_common.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_common.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_common.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_common.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_common.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_flash.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_flash.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_flash.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_flash.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_idm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_idm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_idm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_idm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_io_map.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_io_map.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_io_map.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_io_map.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_iproc_regs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_iproc_regs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_iproc_regs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_iproc_regs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_nand_iproc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_nand_iproc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_nand_iproc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_nand_iproc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_qspi_iproc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_qspi_iproc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_qspi_iproc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_qspi_iproc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_reg_utils.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_reg_utils.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_reg_utils.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_reg_utils.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_ing_open.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_ing_open.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_ing_open.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_ing_open.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_ns_open.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_ns_open.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_ns_open.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_ns_open.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_nsp_open.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_nsp_open.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_nsp_open.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_nsp_open.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_p7_open.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_p7_open.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_socregs_p7_open.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_socregs_p7_open.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_vmalloc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_vmalloc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_include_mach_vmalloc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_include_mach_vmalloc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_io_map.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_io_map.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_io_map.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_io_map.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_localtimer.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_localtimer.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_localtimer.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_localtimer.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_northstar.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_northstar.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_northstar.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_northstar.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_northstar.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_northstar.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_northstar.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_northstar.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_northstar_dmu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_northstar_dmu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_northstar_dmu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_northstar_dmu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_pm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_pm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mach-iproc_pm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mach-iproc_pm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_init.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_init.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_init.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_init.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_ioremap.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_ioremap.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_ioremap.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_ioremap.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_mm.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_mm.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_mm.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_mm.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_mmap.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_mmap.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_mmap.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_mmap.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_mmu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_mmu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_mmu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_mmu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_nommu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_nommu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_mm_nommu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_mm_nommu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_net_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_net_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_net_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_net_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_net_bpf_jit_32.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_net_bpf_jit_32.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_net_bpf_jit_32.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_net_bpf_jit_32.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_net_bpf_jit_32.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_net_bpf_jit_32.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_net_bpf_jit_32.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_net_bpf_jit_32.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_bcm5301x.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_bcm5301x.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_bcm5301x.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_bcm5301x.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_clock.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_clock.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_clock.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_clock.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_headsmp.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_headsmp.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_headsmp.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_headsmp.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_hotplug.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_hotplug.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_hotplug.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_hotplug.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_brcm_rdb_rng.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_brcm_rdb_rng.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_brcm_rdb_rng.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_brcm_rdb_rng.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_bridge-regs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_bridge-regs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_bridge-regs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_bridge-regs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_clkdev.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_clkdev.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_clkdev.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_clkdev.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_clock.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_clock.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_clock.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_clock.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_common.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_common.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_common.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_common.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_debug-macro.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_debug-macro.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_debug-macro.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_debug-macro.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_entry-macro.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_entry-macro.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_entry-macro.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_entry-macro.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_gpio.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_gpio.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_gpio.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_gpio.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_hardware.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_hardware.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_hardware.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_hardware.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_io.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_io.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_io.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_io.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_iproc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_iproc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_iproc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_iproc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_iproc_timer.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_iproc_timer.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_iproc_timer.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_iproc_timer.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_irqs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_irqs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_irqs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_irqs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_lm.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_lm.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_lm.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_lm.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_memory.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_memory.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_memory.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_memory.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_sdio_platform.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_sdio_platform.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_sdio_platform.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_sdio_platform.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_smp.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_smp.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_smp.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_smp.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_system.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_system.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_system.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_system.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_timer.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_timer.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_timer.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_timer.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_timex.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_timex.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_timex.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_timex.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_uncompress.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_uncompress.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_mach_uncompress.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_mach_uncompress.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_dma-pl330.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_dma-pl330.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_dma-pl330.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_dma-pl330.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_dma_drv.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_dma_drv.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_dma_drv.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_dma_drv.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_dmux.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_dmux.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_dmux.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_dmux.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_osdal_os.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_osdal_os.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_osdal_os.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_osdal_os.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_shm.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_shm.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_shm.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_shm.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_spi_iproc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_spi_iproc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_spi_iproc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_spi_iproc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_swreset_rec.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_swreset_rec.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_swreset_rec.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_swreset_rec.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_timer-sp.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_timer-sp.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_timer-sp.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_timer-sp.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_types.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_types.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_include_plat_types.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_include_plat_types.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_iproc-cache.S.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_iproc-cache.S.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_iproc-cache.S.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_iproc-cache.S.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_iproc_cru.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_iproc_cru.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_iproc_cru.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_iproc_cru.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_irq.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_irq.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_irq.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_irq.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_lm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_lm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_lm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_lm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_localtimer.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_localtimer.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_localtimer.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_localtimer.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_platsmp.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_platsmp.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_platsmp.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_platsmp.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_shm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_shm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_shm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_shm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_swreset_rec.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_swreset_rec.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_swreset_rec.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_swreset_rec.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_sysfs.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_sysfs.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_sysfs.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_sysfs.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_timer-sp.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_timer-sp.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_timer-sp.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_timer-sp.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_timer.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_timer.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_plat-iproc_timer.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_plat-iproc_timer.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/arch_arm_tools_mach-types.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_tools_mach-types.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/arch_arm_tools_mach-types.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/arch_arm_tools_mach-types.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_base.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_base.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_base.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_base.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_bus.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_bus.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_bus.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_bus.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_class.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_class.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_class.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_class.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_core.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_core.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_core.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_core.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_cpu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_cpu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_cpu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_cpu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_init.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_init.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_init.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_init.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_node.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_node.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_node.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_node.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_sys.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_sys.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_sys.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_sys.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_base_topology.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_topology.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_base_topology.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_base_topology.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcma_host_pci.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcma_host_pci.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcma_host_pci.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcma_host_pci.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_dma-pl330.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_dma-pl330.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_dma-pl330.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_dma-pl330.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_dma.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_dma.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_dma.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_dma.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_dma_drv.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_dma_drv.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_dma_drv.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_dma_drv.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_pl330-pdata.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_pl330-pdata.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_dma_pl330-pdata.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_dma_pl330-pdata.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_et_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_et_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_et_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_et_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_et_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_et_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_et_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_et_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_et_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_et_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_et_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_et_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.sh.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.sh.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.sh.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_hnd_shared_ksyms.sh.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_cfg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_cfg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_cfg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_cfg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_dbg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_dbg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_dbg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_dbg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_export.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_export.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_export.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_export.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_et_linux.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_et_sys_etcgmac.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_aidmp.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_aidmp.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_aidmp.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_aidmp.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_arminc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_arminc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_arminc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_arminc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcm_cfg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcm_cfg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcm_cfg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcm_cfg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcm_mpool_pub.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcm_mpool_pub.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcm_mpool_pub.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcm_mpool_pub.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmcdc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmcdc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmcdc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmcdc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmdefs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmdefs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmdefs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmdefs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmdevs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmdevs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmdevs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmdevs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmendian.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmendian.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmendian.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmendian.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmenetmib.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmenetmib.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmenetmib.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmenetmib.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmenetphy.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmenetphy.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmenetphy.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmenetphy.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmenetrxh.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmenetrxh.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmenetrxh.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmenetrxh.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacmib.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacmib.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacmib.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacmib.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacrxh.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacrxh.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacrxh.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmgmacrxh.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5221.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5221.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5221.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5221.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5461s.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5461s.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5461s.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_phy5461s.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_robo_serdes.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_robo_serdes.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_robo_serdes.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_robo_serdes.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes_def.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes_def.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes_def.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmiproc_serdes_def.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmnvram.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmnvram.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmnvram.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmnvram.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmotp.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmotp.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmotp.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmotp.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmparams.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmparams.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmparams.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmparams.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmperf.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmperf.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmperf.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmperf.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmrobo.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmrobo.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmrobo.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmrobo.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsdh.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsdh.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsdh.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsdh.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsdpcm.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsdpcm.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsdpcm.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsdpcm.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_fmt.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_fmt.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_fmt.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_fmt.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_tbl.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_tbl.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_tbl.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmsrom_tbl.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmstdlib.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmstdlib.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmstdlib.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmstdlib.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmutils.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmutils.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmutils.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmutils.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmwifi.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmwifi.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_bcmwifi.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_bcmwifi.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_compvers.sh.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_compvers.sh.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_compvers.sh.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_compvers.sh.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_ctf_ctf_cfg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_ctf_ctf_cfg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_ctf_ctf_cfg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_ctf_ctf_cfg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_ctf_hndctf.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_ctf_hndctf.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_ctf_hndctf.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_ctf_hndctf.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.in.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.in.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.in.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.in.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_epivers.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_epivers.sh.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_epivers.sh.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_epivers.sh.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_epivers.sh.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_etioctl.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_etioctl.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_etioctl.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_etioctl.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_gmac_common.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_gmac_common.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_gmac_common.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_gmac_common.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_gmac_core.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_gmac_core.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_gmac_core.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_gmac_core.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndarm.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndarm.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndarm.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndarm.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndchipc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndchipc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndchipc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndchipc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndcpu.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndcpu.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndcpu.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndcpu.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hnddma.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hnddma.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hnddma.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hnddma.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndfwd.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndfwd.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndfwd.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndfwd.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndsoc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndsoc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndsoc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndsoc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndtcam.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndtcam.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_hndtcam.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_hndtcam.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_linux_osl.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_linux_osl.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_linux_osl.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_linux_osl.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_linuxver.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_linuxver.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_linuxver.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_linuxver.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_osl.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_osl.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_osl.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_osl.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_packed_section_end.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_packed_section_end.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_packed_section_end.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_packed_section_end.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_packed_section_start.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_packed_section_start.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_packed_section_start.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_packed_section_start.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_pcicfg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_pcicfg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_pcicfg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_pcicfg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_802.11.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_802.11.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_802.11.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_802.11.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_802.1d.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_802.1d.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_802.1d.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_802.1d.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_BOM.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_BOM.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_BOM.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_BOM.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmeth.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmeth.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmeth.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmeth.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmevent.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmevent.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmevent.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmevent.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmip.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmip.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmip.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmip.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmipv6.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmipv6.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmipv6.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_bcmipv6.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_ethernet.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_ethernet.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_ethernet.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_ethernet.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_vlan.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_vlan.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_vlan.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_vlan.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_wpa.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_wpa.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_proto_wpa.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_proto_wpa.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbchipc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbchipc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbchipc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbchipc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbconfig.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbconfig.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbconfig.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbconfig.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbhndarm.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbhndarm.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbhndarm.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbhndarm.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbhnddma.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbhnddma.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbhnddma.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbhnddma.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbsocram.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbsocram.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_sbsocram.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_sbsocram.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_siutils.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_siutils.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_siutils.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_siutils.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_trxhdr.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_trxhdr.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_trxhdr.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_trxhdr.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_typedefs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_typedefs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_typedefs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_typedefs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_wlioctl.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_wlioctl.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_include_wlioctl.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_include_wlioctl.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_aiutils.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_aiutils.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_aiutils.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_aiutils.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5221.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5221.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5221.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5221.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5461s.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5461s.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5461s.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_phy5461s.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_robo_serdes.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_robo_serdes.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_robo_serdes.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_robo_serdes.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_serdes.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_serdes.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_serdes.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmiproc_serdes.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmotp.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmotp.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmotp.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmotp.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmrobo.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmrobo.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmrobo.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmrobo.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmsrom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmsrom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmsrom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmsrom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmutils.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmutils.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_bcmutils.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_bcmutils.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hnddma.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hnddma.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hnddma.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hnddma.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hndfwd.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hndfwd.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hndfwd.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hndfwd.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hr2_erom.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_hx4_erom.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_kt2_erom.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_linux_osl.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_linux_osl.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_linux_osl.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_linux_osl.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_nsp_erom.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_nvramstubs.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_nvramstubs.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_nvramstubs.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_nvramstubs.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_siutils.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_siutils.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_siutils.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_siutils.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_siutils_priv.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_siutils_priv.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_siutils_priv.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_siutils_priv.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_wl_config.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_wl_config.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gmac_src_shared_wl_config.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gmac_src_shared_wl_config.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio_cfg.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio_cfg.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio_cfg.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio_cfg.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio_cfg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio_cfg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpio_cfg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpio_cfg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpiolib.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpiolib.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_gpio_gpiolib.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_gpio_gpiolib.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_include_Readme.txt.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_include_Readme.txt.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_include_Readme.txt.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_include_Readme.txt.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_iproc_mdio.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_iproc_mdio.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_iproc_mdio.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_iproc_mdio.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_iproc_mdio.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_iproc_mdio.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_iproc_mdio.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_iproc_mdio.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_iproc_mdio_dev.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_iproc_mdio_dev.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_mdio_iproc_mdio_dev.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_mdio_iproc_mdio_dev.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_nand_iproc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_nand_iproc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_nand_nand_iproc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_nand_nand_iproc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_iproc-pmu.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_iproc-pmu.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pmu_iproc-pmu.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pmu_iproc-pmu.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_iproc_pwmc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_iproc_pwmc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_iproc_pwmc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_iproc_pwmc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_iproc_pwmc_3x.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_iproc_pwmc_3x.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_pwm_iproc_pwmc_3x.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_pwm_iproc_pwmc_3x.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_qspi_iproc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_qspi_iproc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_qspi_qspi_iproc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_qspi_qspi_iproc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus_defs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus_defs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus_defs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus_defs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus_regs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus_regs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_smbus_iproc_smbus_regs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_smbus_iproc_smbus_regs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_iproc_timer.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_iproc_timer.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_iproc_timer.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_iproc_timer.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_iproc_timer.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_iproc_timer.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_timer_iproc_timer.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_timer_iproc_timer.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_bcm-iproc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_bcm-iproc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_bcm-iproc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_bcm-iproc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_bcm_usbh.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_bcm_usbh.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_bcm_usbh.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_bcm_usbh.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_ehci-bcm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_ehci-bcm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_ehci-bcm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_ehci-bcm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_ohci-bcm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_ohci-bcm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_ohci-bcm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_ohci-bcm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_usbh_cfg.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_usbh_cfg.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_usb2h_usbh_cfg.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_usb2h_usbh_cfg.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_.gitignore.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_.gitignore.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_.gitignore.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_.gitignore.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_iproc_wdt.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_iproc_wdt.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_bcmdrivers_wdt_iproc_wdt.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_bcmdrivers_wdt_iproc_wdt.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_cpuidle_cpuidle.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_cpuidle_cpuidle.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_cpuidle_cpuidle.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_cpuidle_cpuidle.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_cpuidle_cpuidle.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_cpuidle_cpuidle.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_cpuidle_cpuidle.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_cpuidle_cpuidle.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_cpuidle_sysfs.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_cpuidle_sysfs.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_cpuidle_sysfs.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_cpuidle_sysfs.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_crypto_padlock-aes.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_crypto_padlock-aes.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_crypto_padlock-aes.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_crypto_padlock-aes.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_crypto_padlock-sha.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_crypto_padlock-sha.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_crypto_padlock-sha.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_crypto_padlock-sha.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_dma_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_dma_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_dma_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_dma_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_dma_imx-sdma.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_dma_imx-sdma.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_dma_imx-sdma.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_dma_imx-sdma.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_gpio_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_gpio_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_gpio_gpio-mpc8xxx.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_gpio-mpc8xxx.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_gpio_gpio-mpc8xxx.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_gpio-mpc8xxx.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_gpio_gpio-pca953x.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_gpio-pca953x.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_gpio_gpio-pca953x.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_gpio-pca953x.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_gpio_gpio-sch.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_gpio-sch.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_gpio_gpio-sch.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_gpio_gpio-sch.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_adt7470.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_adt7470.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_adt7470.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_adt7470.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_adt7475.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_adt7475.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_adt7475.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_adt7475.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_coretemp.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_coretemp.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_coretemp.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_coretemp.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_cy8c3245r1.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_cy8c3245r1.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_cy8c3245r1.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_cy8c3245r1.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_cy8cxx.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_cy8cxx.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_cy8cxx.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_cy8cxx.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_emc2305.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_emc2305.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_emc2305.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_emc2305.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_it87.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_it87.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_it87.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_it87.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_max6620.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_max6620.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_max6620.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_max6620.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_max6639.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_max6639.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_max6639.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_max6639.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_max6697.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_max6697.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_max6697.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_max6697.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_cpr4011.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_cpr4011.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_cpr4011.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_cpr4011.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_dps460.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_dps460.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_dps460.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_dps460.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_pmbus.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_pmbus.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_pmbus.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_pmbus.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_pmbus_core.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_pmbus_core.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_pmbus_core.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_pmbus_core.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_ps2471.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_ps2471.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_pmbus_ps2471.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_pmbus_ps2471.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_via-cputemp.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_via-cputemp.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_hwmon_via-cputemp.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_hwmon_via-cputemp.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_busses_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_busses_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_busses_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_busses_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_busses_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_busses_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_busses_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_busses_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_i2c-mux.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_i2c-mux.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_i2c-mux.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_i2c-mux.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_gpio-i2cmux.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_gpio-i2cmux.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_gpio-i2cmux.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_gpio-i2cmux.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_pca9541.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_pca9541.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_pca9541.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_pca9541.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_pca954x.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_pca954x.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_i2c_muxes_pca954x.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_i2c_muxes_pca954x.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_ds100df410.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_ds100df410.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_ds100df410.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_ds100df410.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_early_dma_alloc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_early_dma_alloc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_early_dma_alloc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_early_dma_alloc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_at24.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_at24.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_at24.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_at24.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_eeprom_class.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_eeprom_class.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_eeprom_class.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_eeprom_class.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_sff_8436_eeprom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_sff_8436_eeprom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_eeprom_sff_8436_eeprom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_eeprom_sff_8436_eeprom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_iwmc3200top_fw-download.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_iwmc3200top_fw-download.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_iwmc3200top_fw-download.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_iwmc3200top_fw-download.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_retimer_class.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_retimer_class.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_retimer_class.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_retimer_class.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_misc_ti-st_st_kim.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_ti-st_st_kim.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_misc_ti-st_st_kim.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_misc_ti-st_st_kim.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_chips_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_chips_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_chips_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_chips_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_chips_cfi_cmdset_0020.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_chips_cfi_cmdset_0020.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_chips_cfi_cmdset_0020.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_chips_cfi_cmdset_0020.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_devices_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_devices_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_devices_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_devices_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_devices_m25p80.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_devices_m25p80.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_devices_m25p80.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_devices_m25p80.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_maps_physmap_of.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_maps_physmap_of.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_maps_physmap_of.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_maps_physmap_of.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_mtdoops.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_mtdoops.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_mtdoops.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_mtdoops.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_mtd_ubi_build.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_ubi_build.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_mtd_ubi_build.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_mtd_ubi_build.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_can_softing_softing_fw.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_can_softing_softing_fw.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_can_softing_softing_fw.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_can_softing_softing_fw.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_cmn.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_cmn.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_cmn.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_cmn.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_ethtool.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_ethtool.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_ethtool.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_ethtool.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_main.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_main.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_main.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_bnx2x_bnx2x_main.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_tg3.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_tg3.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_ethernet_broadcom_tg3.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_ethernet_broadcom_tg3.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_phy_mdio_bus.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_phy_mdio_bus.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_phy_mdio_bus.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_phy_mdio_bus.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_phy_phy.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_phy_phy.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_phy_phy.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_phy_phy.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_net_phy_phy_device.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_phy_phy_device.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_net_phy_phy_device.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_net_phy_phy_device.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_of_of_mdio.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_of_of_mdio.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_of_of_mdio.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_of_of_mdio.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_of_platform.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_of_platform.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_of_platform.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_of_platform.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_access.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_access.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_access.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_access.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_msi.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_msi.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_msi.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_msi.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_pci.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_pci.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_pci.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_pci.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_pcie_aspm.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_pcie_aspm.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_pcie_aspm.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_pcie_aspm.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_probe.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_probe.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_probe.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_probe.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_quirks.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_quirks.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_quirks.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_quirks.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_pci_setup-res.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_setup-res.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_pci_setup-res.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_pci_setup-res.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_rtc_hctosys.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_hctosys.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_rtc_hctosys.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_hctosys.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_rtc_rtc-m41t80.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_rtc-m41t80.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_rtc_rtc-m41t80.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_rtc-m41t80.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_rtc_rtc-mv.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_rtc-mv.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_rtc_rtc-mv.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_rtc-mv.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_rtc_rtc-s35390a.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_rtc-s35390a.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_rtc_rtc-s35390a.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_rtc_rtc-s35390a.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_tty_cyclades.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_cyclades.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_tty_cyclades.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_cyclades.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_tty_moxa.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_moxa.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_tty_moxa.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_moxa.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_tty_serial_icom.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_serial_icom.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_tty_serial_icom.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_serial_icom.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_tty_serial_ucc_uart.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_serial_ucc_uart.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_tty_serial_ucc_uart.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_tty_serial_ucc_uart.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_host_ehci-hcd.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_host_ehci-hcd.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_host_ehci-hcd.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_host_ehci-hcd.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_host_ehci-hub.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_host_ehci-hub.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_host_ehci-hub.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_host_ehci-hub.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_host_ohci-hcd.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_host_ohci-hcd.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_host_ohci-hcd.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_host_ohci-hcd.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_misc_emi26.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_misc_emi26.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_misc_emi26.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_misc_emi26.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_misc_emi62.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_misc_emi62.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_misc_emi62.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_misc_emi62.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_io_edgeport.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_io_edgeport.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_io_edgeport.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_io_edgeport.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_io_ti.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_io_ti.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_io_ti.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_io_ti.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_keyspan.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_keyspan.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_keyspan.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_keyspan.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_keyspan_pda.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_keyspan_pda.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_keyspan_pda.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_keyspan_pda.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_ti_usb_3410_5052.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_ti_usb_3410_5052.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_ti_usb_3410_5052.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_ti_usb_3410_5052.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_whiteheat.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_whiteheat.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_usb_serial_whiteheat.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_usb_serial_whiteheat.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_booke_wdt.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_booke_wdt.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_booke_wdt.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_booke_wdt.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_iTCO_wdt.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_iTCO_wdt.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_iTCO_wdt.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_iTCO_wdt.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_ie6xx_wdt.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_ie6xx_wdt.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_ie6xx_wdt.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_ie6xx_wdt.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_sp5100_tco.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_sp5100_tco.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/drivers_watchdog_sp5100_tco.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/drivers_watchdog_sp5100_tco.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/foopatch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/foopatch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/foopatch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/foopatch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_asm-generic_io-64-nonatomic-hi-lo.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_asm-generic_io-64-nonatomic-hi-lo.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_asm-generic_io-64-nonatomic-hi-lo.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_asm-generic_io-64-nonatomic-hi-lo.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_asm-generic_io-64-nonatomic-lo-hi.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_asm-generic_io-64-nonatomic-lo-hi.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_asm-generic_io-64-nonatomic-lo-hi.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_asm-generic_io-64-nonatomic-lo-hi.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_amba_bus.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_amba_bus.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_amba_bus.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_amba_bus.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_audit.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_audit.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_audit.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_audit.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_bitops.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_bitops.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_bitops.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_bitops.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_ceph_messenger.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ceph_messenger.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_ceph_messenger.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ceph_messenger.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_connector.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_connector.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_connector.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_connector.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_cpu.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_cpu.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_cpu.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_cpu.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_dcache.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dcache.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_dcache.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dcache.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_device-mapper.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_device-mapper.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_device-mapper.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_device-mapper.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_device.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_device.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_device.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_device.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_dma-mapping.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dma-mapping.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_dma-mapping.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dma-mapping.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_dmaengine.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dmaengine.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_dmaengine.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dmaengine.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_dmi.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dmi.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_dmi.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dmi.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_dynamic_queue_limits.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dynamic_queue_limits.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_dynamic_queue_limits.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_dynamic_queue_limits.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_early_dma_alloc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_early_dma_alloc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_early_dma_alloc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_early_dma_alloc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_eeprom_class.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_eeprom_class.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_eeprom_class.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_eeprom_class.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_efi.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_efi.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_efi.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_efi.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_ethtool.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ethtool.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_ethtool.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ethtool.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_ftrace_event.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ftrace_event.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_ftrace_event.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ftrace_event.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_hashtable.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_hashtable.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_hashtable.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_hashtable.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_i2c-mux-gpio.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c-mux-gpio.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_i2c-mux-gpio.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c-mux-gpio.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_i2c-mux.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c-mux.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_i2c-mux.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c-mux.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_i2c.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_i2c.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_i2c_at24.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c_at24.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_i2c_at24.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c_at24.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_i2c_pca953x.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c_pca953x.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_i2c_pca953x.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c_pca953x.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_i2c_sff-8436.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c_sff-8436.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_i2c_sff-8436.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_i2c_sff-8436.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_if_bridge.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_bridge.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_if_bridge.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_bridge.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_if_ether.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_ether.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_if_ether.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_ether.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_if_link.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_link.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_if_link.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_link.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_if_tun.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_tun.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_if_tun.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_if_tun.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_init.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_init.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_init.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_init.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_irqdesc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_irqdesc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_irqdesc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_irqdesc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_jbd2.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_jbd2.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_jbd2.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_jbd2.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_jiffies.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_jiffies.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_jiffies.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_jiffies.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_kvm_host.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_kvm_host.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_kvm_host.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_kvm_host.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mdio.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mdio.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mdio.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mdio.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mii.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mii.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mii.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mii.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mm_types.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mm_types.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mm_types.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mm_types.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mod_devicetable.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mod_devicetable.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mod_devicetable.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mod_devicetable.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mroute.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mroute.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mroute.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mroute.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_msi.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_msi.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_msi.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_msi.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mtd_cfi.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mtd_cfi.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mtd_cfi.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mtd_cfi.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mtd_cfi_endian.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mtd_cfi_endian.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mtd_cfi_endian.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mtd_cfi_endian.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_mtd_map.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mtd_map.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_mtd_map.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_mtd_map.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_neighbour.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_neighbour.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_neighbour.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_neighbour.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_of_mdio.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_of_mdio.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_of_mdio.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_of_mdio.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_pci.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pci.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_pci.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pci.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_pci_ids.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pci_ids.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_pci_ids.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pci_ids.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_pci_regs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pci_regs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_pci_regs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pci_regs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_percpu.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_percpu.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_percpu.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_percpu.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_perf_event.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_perf_event.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_perf_event.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_perf_event.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_phy.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_phy.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_phy.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_phy.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_pid_namespace.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pid_namespace.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_pid_namespace.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pid_namespace.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_pkt_sched.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pkt_sched.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_pkt_sched.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pkt_sched.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_platform_data_max6697.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_platform_data_max6697.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_platform_data_max6697.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_platform_data_max6697.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_platform_device.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_platform_device.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_platform_device.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_platform_device.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_port.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_port.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_port.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_port.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_pps_kernel.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pps_kernel.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_pps_kernel.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_pps_kernel.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_ptrace.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ptrace.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_ptrace.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_ptrace.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_random.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_random.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_random.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_random.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_regulator_consumer.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_regulator_consumer.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_regulator_consumer.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_regulator_consumer.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_retimer_class.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_retimer_class.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_retimer_class.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_retimer_class.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_rmap.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_rmap.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_rmap.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_rmap.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_skbuff.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_skbuff.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_skbuff.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_skbuff.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_slab_def.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_slab_def.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_slab_def.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_slab_def.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_snmp.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_snmp.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_snmp.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_snmp.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_swiotlb.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_swiotlb.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_swiotlb.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_swiotlb.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_sysctl.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_sysctl.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_sysctl.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_sysctl.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_sysfs.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_sysfs.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_sysfs.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_sysfs.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_sysrq.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_sysrq.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_sysrq.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_sysrq.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_tcp.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_tcp.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_tcp.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_tcp.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_u64_stats_sync.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_u64_stats_sync.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_u64_stats_sync.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_u64_stats_sync.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_usb.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_usb.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_usb.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_usb.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_usb_ehci_def.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_usb_ehci_def.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_usb_ehci_def.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_usb_ehci_def.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_usb_hcd.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_usb_hcd.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_usb_hcd.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_usb_hcd.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_vmalloc.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_vmalloc.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_vmalloc.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_vmalloc.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_linux_watchdog.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_watchdog.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_linux_watchdog.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_linux_watchdog.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/include_trace_syscall.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_trace_syscall.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/include_trace_syscall.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/include_trace_syscall.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/init_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/init_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/init_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/init_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/kernel-fs-overlayfs-inode.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/kernel-fs-overlayfs-inode.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/kernel-fs-overlayfs-inode.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/kernel-fs-overlayfs-inode.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/kernel-overlayfs-v11.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/kernel-overlayfs-v11.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/kernel-overlayfs-v11.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/kernel-overlayfs-v11.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/lib_Kconfig.debug.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_Kconfig.debug.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/lib_Kconfig.debug.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_Kconfig.debug.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/lib_Kconfig.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_Kconfig.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/lib_Kconfig.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_Kconfig.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/lib_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/lib_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/lib_dynamic_queue_limits.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_dynamic_queue_limits.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/lib_dynamic_queue_limits.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_dynamic_queue_limits.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/lib_nlattr.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_nlattr.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/lib_nlattr.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_nlattr.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/lib_swiotlb.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_swiotlb.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/lib_swiotlb.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/lib_swiotlb.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_backing-dev.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_backing-dev.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_backing-dev.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_backing-dev.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_memcontrol.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_memcontrol.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_memcontrol.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_memcontrol.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_rmap.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_rmap.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_rmap.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_rmap.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_slab.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_slab.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_slab.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_slab.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_sparse-vmemmap.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_sparse-vmemmap.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_sparse-vmemmap.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_sparse-vmemmap.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_swap.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_swap.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_swap.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_swap.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_truncate.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_truncate.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_truncate.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_truncate.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_vmalloc.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_vmalloc.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_vmalloc.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_vmalloc.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/mm_vmscan.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_vmscan.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/mm_vmscan.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/mm_vmscan.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/overlayfs_notify.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/overlayfs_notify.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/overlayfs_notify.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/overlayfs_notify.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/platform-accton-as4610-device-drivers.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/platform-accton-as4610-device-drivers.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/platform-accton-as4610-device-drivers.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/platform-accton-as4610-device-drivers.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_Makefile.fwinst.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_Makefile.fwinst.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_Makefile.fwinst.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_Makefile.fwinst.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_conf.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_conf.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_conf.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_conf.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_confdata.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_confdata.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_confdata.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_confdata.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_expr.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_expr.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_expr.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_expr.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_lkc_proto.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_lkc_proto.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_kconfig_lkc_proto.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_kconfig_lkc_proto.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_mod_file2alias.c.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_mod_file2alias.c.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_mod_file2alias.c.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_mod_file2alias.c.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/scripts_package_Makefile.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_package_Makefile.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/scripts_package_Makefile.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/scripts_package_Makefile.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/series b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/series similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/series rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/series diff --git a/packages/base/any/kernels/3.2-lts/patches/tools_include_tools_be_byteshift.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/tools_include_tools_be_byteshift.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/tools_include_tools_be_byteshift.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/tools_include_tools_be_byteshift.h.patch diff --git a/packages/base/any/kernels/3.2-lts/patches/tools_include_tools_le_byteshift.h.patch b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/tools_include_tools_le_byteshift.h.patch similarity index 100% rename from packages/base/any/kernels/3.2-lts/patches/tools_include_tools_le_byteshift.h.patch rename to packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/patches/tools_include_tools_le_byteshift.h.patch From e0eff419ca2c502ac7ae04569e6511f8b2e980bd Mon Sep 17 00:00:00 2001 From: Jonathan Tsai Date: Thu, 8 Jun 2017 17:21:53 +0800 Subject: [PATCH 11/31] [Quanta-IX2] Update CPLD from qci_cpld.c to qci_cpld_sfp28.c --- .../x86-64/modules/builds/qci_cpld_sfp28.c | 400 ++++++++++++++++++ .../modules/builds/quanta_platform_ix2.c | 2 +- .../module/src/sfpi.c | 96 ++--- .../x86_64_quanta_ix2_rangeley_r0/__init__.py | 2 +- 4 files changed, 450 insertions(+), 50 deletions(-) create mode 100755 packages/platforms/quanta/x86-64/modules/builds/qci_cpld_sfp28.c diff --git a/packages/platforms/quanta/x86-64/modules/builds/qci_cpld_sfp28.c b/packages/platforms/quanta/x86-64/modules/builds/qci_cpld_sfp28.c new file mode 100755 index 00000000..f2f2c0d8 --- /dev/null +++ b/packages/platforms/quanta/x86-64/modules/builds/qci_cpld_sfp28.c @@ -0,0 +1,400 @@ +/* + * A CPLD driver for monitor SFP28 module I/O + * + * The CPLD is customize by Quanta for controlling SFP28 module signals, + * they are TX_FAULT , TX_DIS , PRE_N , RX_LOS + * Each CPLD control 16 modules, each module use 4 bits in register. + * + * Copyright (C) 2015 Quanta Inc. + * + * Author: Luffy Cheng + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static DEFINE_IDA(cpld_ida); + +enum platform_type { + SFP = 0, + SFP28, + NONE +}; + +static struct class *cpld_class = NULL; + +struct sfp_data { + struct i2c_client *cpld_client; + char name[8]; + char type[8]; + u8 port_id; + u8 cpld_port; +}; + +struct cpld_data { + struct mutex lock; + struct device *port_dev[16]; + struct sfp_data *port_data[16]; +}; + +static int cpld_probe(struct i2c_client *client, + const struct i2c_device_id *id); +static int cpld_remove(struct i2c_client *client); + +static const struct i2c_device_id cpld_id[] = { + { "CPLD-SFP", SFP }, + { "CPLD-SFP28", SFP28 }, + { } +}; +MODULE_DEVICE_TABLE(i2c, cpld_id); + +static struct i2c_driver cpld_driver = { + .class = I2C_CLASS_HWMON, + .driver = { + .name = "qci_cpld_sfp28", + }, + .probe = cpld_probe, + .remove = cpld_remove, + .id_table = cpld_id, +// .address_list = normal_i2c, +}; + +#define CPLD_ID_PREFIX "port-" +#define CPLD_ID_FORMAT CPLD_ID_PREFIX "%d" + +//SFP28 +#define TX_FAULT_MASK 0x08 +#define TX_DIS_MASK 0x04 +#define PRE_N_MASK 0x02 +#define RX_LOS_MASK 0x01 + +static inline u8 get_group_cmd(u8 group) +{ + //FIXME: if group cmd change + return (group + 1); +} + +static inline u8 port_remapping(u8 phy_port) +{ + /* FIXME: implement by hardware design */ + /* The CPLD register port mapping is weird : + * MSB -------- LSB (word data) + * P3 P4 P1 P2 (per port 4 bits) + * For easy coding bit shift, we treat it as hw port swap + */ + return (phy_port % 2) ? (phy_port - 1) : (phy_port + 1); +} + +//SFP +static ssize_t get_tx_fault(struct device *dev, + struct device_attribute *devattr, + char *buf) +{ + struct sfp_data *data = dev_get_drvdata(dev); + struct i2c_client *client = data->cpld_client; + u8 group = (u8)(data->cpld_port / 4); + u8 group_port = data->cpld_port % 4; + s32 value; + + dev_dbg(&client->dev, "port_id %d => cpld_port %d, group %d(%d)\n", data->port_id, + data->cpld_port + 1, group + 1, group_port + 1); + + value = i2c_smbus_read_word_data(client, get_group_cmd(group)); + if (value < 0) + return -ENODEV; + + dev_dbg(&client->dev, "read group%d value= %x\n", group + 1, value); + + value >>= (group_port * 4); + value &= TX_FAULT_MASK; + + return sprintf(buf, "%d\n", value ? 1 : 0); +} + +static ssize_t get_tx_dis(struct device *dev, + struct device_attribute *devattr, + char *buf) +{ + struct sfp_data *data = dev_get_drvdata(dev); + struct i2c_client *client = data->cpld_client; + u8 group = (u8)(data->cpld_port / 4); + u8 group_port = data->cpld_port % 4; + s32 value; + + dev_dbg(&client->dev, "port_id %d => cpld_port %d, group %d(%d)\n", data->port_id, + data->cpld_port + 1, group + 1, group_port + 1); + + value = i2c_smbus_read_word_data(client, get_group_cmd(group)); + if (value < 0) + return -ENODEV; + + dev_dbg(&client->dev, "read group%d value= %x\n", group + 1, value); + + value >>= (group_port * 4); + value &= TX_DIS_MASK; + + return sprintf(buf, "%d\n", value ? 1 : 0); +} + +static ssize_t get_pre_n(struct device *dev, + struct device_attribute *devattr, + char *buf) +{ + struct sfp_data *data = dev_get_drvdata(dev); + struct i2c_client *client = data->cpld_client; + u8 group = (u8)(data->cpld_port / 4); + u8 group_port = data->cpld_port % 4; + s32 value; + + dev_dbg(&client->dev, "port_id %d => cpld_port %d, group %d(%d)\n", data->port_id, + data->cpld_port + 1, group + 1, group_port + 1); + + value = i2c_smbus_read_word_data(client, get_group_cmd(group)); + if (value < 0) + return -ENODEV; + + dev_dbg(&client->dev, "read group%d value= %x\n", group + 1, value); + + value >>= (group_port * 4); + value &= PRE_N_MASK; + + //FIXME: if present is not low active + return sprintf(buf, "%d\n", value ? 0 : 1); +} + +static ssize_t get_rx_los(struct device *dev, + struct device_attribute *devattr, + char *buf) +{ + struct sfp_data *data = dev_get_drvdata(dev); + struct i2c_client *client = data->cpld_client; + u8 group = (u8)(data->cpld_port / 4); + u8 group_port = data->cpld_port % 4; + s32 value; + + dev_dbg(&client->dev, "port_id %d => cpld_port %d, group %d(%d)\n", data->port_id, + data->cpld_port + 1, group + 1, group_port + 1); + + value = i2c_smbus_read_word_data(client, get_group_cmd(group)); + if (value < 0) + return -ENODEV; + + dev_dbg(&client->dev, "read group%d value= %x\n", group + 1, value); + + value >>= (group_port * 4); + value &= RX_LOS_MASK; + + return sprintf(buf, "%d\n", value ? 1 : 0); +} +static ssize_t set_tx_dis(struct device *dev, + struct device_attribute *devattr, + const char *buf, + size_t count) +{ + struct sfp_data *data = dev_get_drvdata(dev); + struct i2c_client *client = data->cpld_client; + u8 group = (u8)(data->cpld_port / 4); + u8 group_port = data->cpld_port % 4; + s32 value; + long disable; + + dev_dbg(&client->dev, "port_id %d => cpld_port %d, group %d(%d)\n", data->port_id, + data->cpld_port + 1, group + 1, group_port + 1); + + if (kstrtol(buf, 0, &disable)) + return -EINVAL; + + if ((disable != 1) && (disable != 0)) + return -EINVAL; + +// mutex_lock(&data->lock); + value = i2c_smbus_read_word_data(client, get_group_cmd(group)); + if (value < 0) + return -ENODEV; + + dev_dbg(&client->dev, "read group%d value= %x\n", group + 1, value); + + value &= ~(TX_DIS_MASK << (group_port * 4)); + if (disable) + value |= (TX_DIS_MASK << (group_port * 4)); + + dev_dbg(&client->dev, "write group%d value= %x\n", group + 1, value); + + i2c_smbus_write_word_data(client, get_group_cmd(group), (u16)value); +// mutex_unlock(&data->lock); + + return count; +} +//SFP + +//static DEVICE_ATTR(led_enable, S_IWUSR | S_IRUGO, get_led_enable, set_led_enable); +//static DEVICE_ATTR(monitor_enable, S_IWUSR | S_IRUGO, get_monitor_enable, set_monitor_enable); +//SFP +static DEVICE_ATTR(tx_fault, S_IRUGO, get_tx_fault, NULL); +static DEVICE_ATTR(tx_dis, S_IWUSR | S_IRUGO, get_tx_dis, set_tx_dis); +static DEVICE_ATTR(pre_n, S_IRUGO, get_pre_n, NULL); +static DEVICE_ATTR(rx_los, S_IRUGO, get_rx_los, NULL); + +static const struct attribute *sfp_attrs[] = { +// &dev_attr_led_enable.attr, + &dev_attr_tx_fault.attr, + &dev_attr_tx_dis.attr, + &dev_attr_pre_n.attr, + &dev_attr_rx_los.attr, + NULL, +}; + +static const struct attribute_group sfp_attr_group = { + .attrs = (struct attribute **) sfp_attrs, +}; + +static int cpld_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct cpld_data *data; + struct sfp_data *port_data; +// struct i2c_monitor_data *monitor_data; + struct device *port_dev; +// struct device *i2c_dev; + int port_nr, i=0, err; + char name[I2C_NAME_SIZE], type[I2C_NAME_SIZE]; + + printk("cpld cpld_probe\n"); + + while(id->name[i]) + { + name[i]=tolower(id->name[i]); + i++; + } + name[i]='\0'; + strncpy(type,name+5,strlen(name)-5); + type[strlen(name)-5]='\0'; + + if (!cpld_class) + { + cpld_class = class_create(THIS_MODULE, name); + if (IS_ERR(cpld_class)) { + pr_err("couldn't create sysfs class\n"); + return PTR_ERR(cpld_class); + } + } + + data = devm_kzalloc(&client->dev, sizeof(struct cpld_data), + GFP_KERNEL); + if (!data) + return -ENOMEM; + + /* register sfp port data to sysfs */ + for (i = 0; i < 16; i++) + { + port_nr = ida_simple_get(&cpld_ida, 1, 99, GFP_KERNEL); + if (port_nr < 0) + return ERR_PTR(port_nr); + + port_data = kzalloc(sizeof(struct sfp_data), GFP_KERNEL); + + port_dev = device_create(cpld_class, &client->dev, MKDEV(0,0), port_data, CPLD_ID_FORMAT, port_nr); + if (IS_ERR(port_dev)) { + err = PTR_ERR(port_dev); + printk("err_status\n"); + } + + data->port_dev[i] = port_dev; + data->port_data[i] = port_data; + + strcpy(port_data->type, type); + + dev_info(&client->dev, "Register %s port-%d\n", port_data->type , port_nr); + + /* FIXME: implement Logical/Physical port remapping */ + //port_data->cpld_port = i; + port_data->cpld_port = port_remapping(i); + sprintf(port_data->name, "port-%d", port_nr); + port_data->port_id = port_nr; + dev_set_drvdata(port_dev, port_data); + port_dev->init_name = port_data->name; + port_data->cpld_client = client; + + err = sysfs_create_group(&port_dev->kobj, &sfp_attr_group); + // if (status) printk("err status\n"); + } + + i2c_set_clientdata(client, data); + mutex_init(&data->lock); + + dev_info(&client->dev, "%s device found\n", client->name); + + + return 0; + +//FIXME: implement error check +//exit_remove: +// sysfs_remove_group(&client->dev.kobj, &data->attrs); + return err; +} + +/* FIXME: for older kernel doesn't with idr_is_empty function, implement here */ +#if 1 +static int idr_has_entry(int id, void *p, void *data) +{ + return 1; +} + +static bool cpld_idr_is_empty(struct idr *idp) +{ + return !idr_for_each(idp, idr_has_entry, NULL); +} +#endif + +static int cpld_remove(struct i2c_client *client) +{ + struct cpld_data *data = i2c_get_clientdata(client); + int i; +// int id; + + for (i = 15; i >= 0; i--) + { + dev_info(data->port_dev[i], "Remove %s port-%d\n", data->port_data[i]->type , data->port_data[i]->port_id); + device_unregister(data->port_dev[i]); + ida_simple_remove(&cpld_ida, data->port_data[i]->port_id); + kfree(data->port_data[i]); + } + + if (cpld_idr_is_empty(&cpld_ida.idr)) + class_destroy(cpld_class); + + return 0; +} + +module_i2c_driver(cpld_driver); + +MODULE_AUTHOR("Jonathan Tsai "); +MODULE_VERSION("1.0"); +MODULE_DESCRIPTION("Quanta Switch SFP28 CPLD driver"); +MODULE_LICENSE("GPL"); diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c index 0b98b52e..d102817d 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/modules/builds/quanta_platform_ix2.c @@ -63,7 +63,7 @@ char *i2c_type_names[] = { "pca9554", "pca9555", "pca9698", - "CPLD-QSFP28", + "CPLD-SFP28", "24c02", "qci_pmbus_ix2", "quanta_ix2_hwmon", diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c index 05243a0f..b507c460 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c @@ -46,54 +46,54 @@ typedef struct sfpmap_s { static sfpmap_t sfpmap__[] = { - { 1, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-1/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-32/32-0050/eeprom", NULL }, - { 2, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-2/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-33/33-0050/eeprom", NULL }, - { 3, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-3/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-34/34-0050/eeprom", NULL }, - { 4, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-4/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-35/35-0050/eeprom", NULL }, - { 5, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-5/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-36/36-0050/eeprom", NULL }, - { 6, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-6/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-37/37-0050/eeprom", NULL }, - { 7, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-7/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-38/38-0050/eeprom", NULL }, - { 8, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-8/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-39/39-0050/eeprom", NULL }, - { 9, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-9/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-40/40-0050/eeprom", NULL }, - { 10, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-10/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-41/41-0050/eeprom", NULL }, - { 11, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-11/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-42/42-0050/eeprom", NULL }, - { 12, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-12/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-43/43-0050/eeprom", NULL }, - { 13, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-13/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-44/44-0050/eeprom", NULL }, - { 14, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-14/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-45/45-0050/eeprom", NULL }, - { 15, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-15/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-46/46-0050/eeprom", NULL }, - { 16, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-qsfp28/port-16/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-47/47-0050/eeprom", NULL }, - { 17, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-17/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-48/48-0050/eeprom", NULL }, - { 18, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-18/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-49/49-0050/eeprom", NULL }, - { 19, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-19/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-50/50-0050/eeprom", NULL }, - { 20, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-20/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-51/51-0050/eeprom", NULL }, - { 21, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-21/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-52/52-0050/eeprom", NULL }, - { 22, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-22/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-53/53-0050/eeprom", NULL }, - { 23, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-23/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-54/54-0050/eeprom", NULL }, - { 24, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-24/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-55/55-0050/eeprom", NULL }, - { 25, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-25/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-56/56-0050/eeprom", NULL }, - { 26, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-26/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-57/57-0050/eeprom", NULL }, - { 27, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-27/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-58/58-0050/eeprom", NULL }, - { 28, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-28/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-59/59-0050/eeprom", NULL }, - { 29, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-29/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-60/60-0050/eeprom", NULL }, - { 30, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-30/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-61/61-0050/eeprom", NULL }, - { 31, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-31/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-62/62-0050/eeprom", NULL }, - { 32, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-qsfp28/port-32/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-63/63-0050/eeprom", NULL }, - { 33, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-33/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-64/64-0050/eeprom", NULL }, - { 34, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-34/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-65/65-0050/eeprom", NULL }, - { 35, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-35/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-66/66-0050/eeprom", NULL }, - { 36, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-36/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-67/67-0050/eeprom", NULL }, - { 37, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-37/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-68/68-0050/eeprom", NULL }, - { 38, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-38/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-69/69-0050/eeprom", NULL }, - { 39, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-39/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-70/70-0050/eeprom", NULL }, - { 40, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-40/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-71/71-0050/eeprom", NULL }, - { 41, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-41/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-72/72-0050/eeprom", NULL }, - { 42, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-42/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-73/73-0050/eeprom", NULL }, - { 43, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-43/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-74/74-0050/eeprom", NULL }, - { 44, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-44/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-75/75-0050/eeprom", NULL }, - { 45, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-45/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-76/76-0050/eeprom", NULL }, - { 46, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-46/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-77/77-0050/eeprom", NULL }, - { 47, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-47/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-78/78-0050/eeprom", NULL }, - { 48, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-qsfp28/port-48/module_present", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-79/79-0050/eeprom", NULL }, + { 1, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-1/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-32/32-0050/eeprom", NULL }, + { 2, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-2/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-33/33-0050/eeprom", NULL }, + { 3, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-3/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-34/34-0050/eeprom", NULL }, + { 4, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-4/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-35/35-0050/eeprom", NULL }, + { 5, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-5/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-36/36-0050/eeprom", NULL }, + { 6, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-6/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-37/37-0050/eeprom", NULL }, + { 7, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-7/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-38/38-0050/eeprom", NULL }, + { 8, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-8/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-39/39-0050/eeprom", NULL }, + { 9, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-9/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-40/40-0050/eeprom", NULL }, + { 10, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-10/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-41/41-0050/eeprom", NULL }, + { 11, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-11/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-42/42-0050/eeprom", NULL }, + { 12, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-12/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-43/43-0050/eeprom", NULL }, + { 13, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-13/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-44/44-0050/eeprom", NULL }, + { 14, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-14/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-45/45-0050/eeprom", NULL }, + { 15, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-15/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-46/46-0050/eeprom", NULL }, + { 16, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-16/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-47/47-0050/eeprom", NULL }, + { 17, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-17/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-48/48-0050/eeprom", NULL }, + { 18, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-18/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-49/49-0050/eeprom", NULL }, + { 19, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-19/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-50/50-0050/eeprom", NULL }, + { 20, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-20/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-51/51-0050/eeprom", NULL }, + { 21, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-21/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-52/52-0050/eeprom", NULL }, + { 22, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-22/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-53/53-0050/eeprom", NULL }, + { 23, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-23/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-54/54-0050/eeprom", NULL }, + { 24, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-24/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-55/55-0050/eeprom", NULL }, + { 25, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-25/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-56/56-0050/eeprom", NULL }, + { 26, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-26/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-57/57-0050/eeprom", NULL }, + { 27, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-27/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-58/58-0050/eeprom", NULL }, + { 28, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-28/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-59/59-0050/eeprom", NULL }, + { 29, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-29/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-60/60-0050/eeprom", NULL }, + { 30, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-30/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-61/61-0050/eeprom", NULL }, + { 31, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-31/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-62/62-0050/eeprom", NULL }, + { 32, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-32/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-63/63-0050/eeprom", NULL }, + { 33, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-33/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-64/64-0050/eeprom", NULL }, + { 34, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-34/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-65/65-0050/eeprom", NULL }, + { 35, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-35/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-66/66-0050/eeprom", NULL }, + { 36, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-36/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-67/67-0050/eeprom", NULL }, + { 37, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-37/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-68/68-0050/eeprom", NULL }, + { 38, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-38/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-69/69-0050/eeprom", NULL }, + { 39, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-39/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-70/70-0050/eeprom", NULL }, + { 40, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-40/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-71/71-0050/eeprom", NULL }, + { 41, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-41/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-72/72-0050/eeprom", NULL }, + { 42, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-42/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-73/73-0050/eeprom", NULL }, + { 43, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-43/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-74/74-0050/eeprom", NULL }, + { 44, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-44/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-75/75-0050/eeprom", NULL }, + { 45, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-45/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-76/76-0050/eeprom", NULL }, + { 46, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-46/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-77/77-0050/eeprom", NULL }, + { 47, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-47/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-78/78-0050/eeprom", NULL }, + { 48, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-48/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-79/79-0050/eeprom", NULL }, }; typedef struct qsfpmap_s { diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py index 186013e1..39ed6904 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py @@ -13,7 +13,7 @@ class OnlPlatform_x86_64_quanta_ix2_rangeley_r0(OnlPlatformQuanta, os.system("i2cset -y 0 0x8 0x1 0x5") self.insmod("qci_pmbus") - self.insmod("qci_cpld") + self.insmod("qci_cpld_sfp28") self.insmod("quanta_hwmon_ix_series") self.insmod("quanta_platform_ix2") From 0fce071a5f15ad80a58117f27ba4bfca982f7ee7 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 08:32:06 -0700 Subject: [PATCH 12/31] Allow K_PATCH_DIR override. --- packages/base/any/kernels/3.2-lts/kconfig.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/base/any/kernels/3.2-lts/kconfig.mk b/packages/base/any/kernels/3.2-lts/kconfig.mk index bbaa91cb..ba7135a8 100644 --- a/packages/base/any/kernels/3.2-lts/kconfig.mk +++ b/packages/base/any/kernels/3.2-lts/kconfig.mk @@ -24,4 +24,6 @@ K_MAJOR_VERSION := 3 K_PATCH_LEVEL := 2 K_SUB_LEVEL := 84 K_SUFFIX := +ifndef K_PATCH_DIR K_PATCH_DIR := $(THIS_DIR)/patches +endif From 48a81f89e605badf48ffe9b844655f7840537335 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 08:32:29 -0700 Subject: [PATCH 13/31] Set patch directory. --- .../base/any/kernels/3.2-lts/configs/arm-iproc-all/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/Makefile b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/Makefile index 6d6cbede..b16fc9d4 100644 --- a/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/Makefile +++ b/packages/base/any/kernels/3.2-lts/configs/arm-iproc-all/Makefile @@ -26,6 +26,8 @@ ifndef K_TARGET_DIR K_TARGET_DIR := $(THIS_DIR) endif +K_PATCH_DIR := $(THIS_DIR)/patches + include ../../kconfig.mk K_CONFIG := arm-iproc-all.config K_BUILD_TARGET := Image From 90611663f2ee9d20b2862fdf312483ae0f7fb31e Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 08:34:24 -0700 Subject: [PATCH 14/31] - 3.2 LTS X86 Base configuration. --- .../3.2-lts/configs/x86_64-all/.gitignore | 2 + .../3.2-lts/configs/x86_64-all/Makefile | 41 + .../configs/x86_64-all/x86_64-all.config | 3010 ++++++++++++++++ .../patches/kernel-fs-overlayfs-inode.patch | 12 + .../patches/kernel-overlayfs-v11.patch | 3178 +++++++++++++++++ .../3.2-lts/patches/overlayfs_notify.patch | 264 ++ .../base/any/kernels/3.2-lts/patches/series | 3 + 7 files changed, 6510 insertions(+) create mode 100644 packages/base/any/kernels/3.2-lts/configs/x86_64-all/.gitignore create mode 100644 packages/base/any/kernels/3.2-lts/configs/x86_64-all/Makefile create mode 100644 packages/base/any/kernels/3.2-lts/configs/x86_64-all/x86_64-all.config create mode 100644 packages/base/any/kernels/3.2-lts/patches/kernel-fs-overlayfs-inode.patch create mode 100644 packages/base/any/kernels/3.2-lts/patches/kernel-overlayfs-v11.patch create mode 100644 packages/base/any/kernels/3.2-lts/patches/overlayfs_notify.patch create mode 100644 packages/base/any/kernels/3.2-lts/patches/series diff --git a/packages/base/any/kernels/3.2-lts/configs/x86_64-all/.gitignore b/packages/base/any/kernels/3.2-lts/configs/x86_64-all/.gitignore new file mode 100644 index 00000000..f03e13f1 --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/configs/x86_64-all/.gitignore @@ -0,0 +1,2 @@ +kernel-3.2* +linux-* diff --git a/packages/base/any/kernels/3.2-lts/configs/x86_64-all/Makefile b/packages/base/any/kernels/3.2-lts/configs/x86_64-all/Makefile new file mode 100644 index 00000000..6d23bb99 --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/configs/x86_64-all/Makefile @@ -0,0 +1,41 @@ +############################################################ +# +# +# Copyright 2015 Big Switch Networks, Inc. +# +# Licensed under the Eclipse Public License, Version 1.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.eclipse.org/legal/epl-v10.html +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +# either express or implied. See the License for the specific +# language governing permissions and limitations under the +# License. +# +# +############################################################ +# +# Default 3.2 LTS Configuration for X86_64 +# +############################################################ +THIS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +include $(ONL)/make/config.mk + +export ARCH := x86_64 +ifndef K_TARGET_DIR +K_TARGET_DIR := $(THIS_DIR) +endif + +include ../../kconfig.mk +K_CONFIG := x86_64-all.config +K_BUILD_TARGET := bzImage +K_COPY_SRC := arch/x86/boot/bzImage +ifndef K_COPY_DST +K_COPY_DST := kernel-3.2-lts-x86_64-all +endif + +include $(ONL)/make/kbuild.mk diff --git a/packages/base/any/kernels/3.2-lts/configs/x86_64-all/x86_64-all.config b/packages/base/any/kernels/3.2-lts/configs/x86_64-all/x86_64-all.config new file mode 100644 index 00000000..a15284e4 --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/configs/x86_64-all/x86_64-all.config @@ -0,0 +1,3010 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/x86_64 3.2.84 Kernel Configuration +# +CONFIG_64BIT=y +# CONFIG_X86_32 is not set +CONFIG_X86_64=y +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_CLOCKSOURCE_DATA=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_GPIO=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_DEFAULT_IDLE=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPU_AUTOPROBE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ZONE_DMA32=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_AUDIT_ARCH=y +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_X86_64_SMP=y +CONFIG_X86_HT=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" +# CONFIG_KTIME_SCALAR is not set +CONFIG_ARCH_CPU_PROBE_RELEASE=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_HAVE_IRQ_WORK=y +CONFIG_IRQ_WORK=y + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="-OpenNetworkLinux" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +# CONFIG_KERNEL_GZIP is not set +CONFIG_KERNEL_BZIP2=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_FHANDLE=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUDIT_TREE=y +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_HAVE_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_PREEMPT_RCU is not set +# CONFIG_RCU_TRACE is not set +CONFIG_RCU_FANOUT=64 +# CONFIG_RCU_FANOUT_EXACT is not set +CONFIG_RCU_FAST_NO_HZ=y +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_MEM_RES_CTLR_DISABLED=y +CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y +# CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is not set +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +# CONFIG_CFS_BANDWIDTH is not set +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_MM_OWNER=y +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_EXPERT=y +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_PCSPKR_PLATFORM=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_PERF_COUNTERS is not set +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_PCI_QUIRKS=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +CONFIG_TRACEPOINTS=y +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +# CONFIG_JUMP_LABEL is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BLK_DEV_INTEGRITY=y +# CONFIG_BLK_DEV_THROTTLING is not set +CONFIG_BLOCK_COMPAT=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" +# CONFIG_INLINE_SPIN_TRYLOCK is not set +# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK is not set +# CONFIG_INLINE_SPIN_LOCK_BH is not set +# CONFIG_INLINE_SPIN_LOCK_IRQ is not set +# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set +CONFIG_INLINE_SPIN_UNLOCK=y +# CONFIG_INLINE_SPIN_UNLOCK_BH is not set +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_READ_TRYLOCK is not set +# CONFIG_INLINE_READ_LOCK is not set +# CONFIG_INLINE_READ_LOCK_BH is not set +# CONFIG_INLINE_READ_LOCK_IRQ is not set +# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set +CONFIG_INLINE_READ_UNLOCK=y +# CONFIG_INLINE_READ_UNLOCK_BH is not set +CONFIG_INLINE_READ_UNLOCK_IRQ=y +# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set +# CONFIG_INLINE_WRITE_TRYLOCK is not set +# CONFIG_INLINE_WRITE_LOCK is not set +# CONFIG_INLINE_WRITE_LOCK_BH is not set +# CONFIG_INLINE_WRITE_LOCK_IRQ is not set +# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set +CONFIG_INLINE_WRITE_UNLOCK=y +# CONFIG_INLINE_WRITE_UNLOCK_BH is not set +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_FREEZER=y + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_SMP=y +CONFIG_X86_MPPARSE=y +# CONFIG_X86_EXTENDED_PLATFORM is not set +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_PARAVIRT_GUEST=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_XEN=y +CONFIG_XEN_DOM0=y +CONFIG_XEN_PRIVILEGED_GUEST=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_MAX_DOMAIN_MEMORY=128 +CONFIG_XEN_SAVE_RESTORE=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_KVM_CLOCK=y +CONFIG_KVM_GUEST=y +CONFIG_PARAVIRT=y +# CONFIG_PARAVIRT_SPINLOCKS is not set +CONFIG_PARAVIRT_CLOCK=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_NO_BOOTMEM=y +CONFIG_MEMTEST=y +# CONFIG_MK8 is not set +# CONFIG_MPSC is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +CONFIG_GENERIC_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_CMPXCHG=y +CONFIG_CMPXCHG_LOCAL=y +CONFIG_CMPXCHG_DOUBLE=y +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_XADD=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_DEBUGCTLMSR=y +# CONFIG_PROCESSOR_SELECT is not set +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +CONFIG_GART_IOMMU=y +CONFIG_CALGARY_IOMMU=y +CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y +CONFIG_SWIOTLB=y +CONFIG_IOMMU_HELPER=y +# CONFIG_MAXSMP is not set +CONFIG_NR_CPUS=512 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_THRESHOLD=y +# CONFIG_X86_MCE_INJECT is not set +CONFIG_X86_THERMAL_VECTOR=y +# CONFIG_X86_16BIT is not set +# CONFIG_I8K is not set +# CONFIG_MICROCODE is not set +CONFIG_X86_MSR=y +CONFIG_X86_CPUID=y +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_DIRECT_GBPAGES=y +# CONFIG_NUMA is not set +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_HAVE_MEMORY_PRESENT=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_COMPACTION=y +CONFIG_MIGRATION=y +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_MEMORY_FAILURE=y +CONFIG_HWPOISON_INJECT=y +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +# CONFIG_CLEANCACHE is not set +# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set +CONFIG_X86_RESERVE_LOW=64 +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_RANDOM=y +# CONFIG_EFI is not set +CONFIG_SECCOMP=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_SCHED_HRTICK=y +CONFIG_KEXEC=y +CONFIG_CRASH_DUMP=y +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_RELOCATABLE=y +CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_HOTPLUG_CPU=y +# CONFIG_COMPAT_VDSO is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y + +# +# Power management and ACPI options +# +# CONFIG_SUSPEND is not set +CONFIG_HIBERNATE_CALLBACKS=y +# CONFIG_HIBERNATION is not set +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_RUNTIME is not set +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_ACPI=y +# CONFIG_ACPI_PROCFS is not set +# CONFIG_ACPI_PROCFS_POWER is not set +# CONFIG_ACPI_EC_DEBUGFS is not set +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_FAN=y +# CONFIG_ACPI_DOCK is not set +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_HOTPLUG_CPU=y +# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_BLACKLIST_YEAR=0 +# CONFIG_ACPI_DEBUG is not set +# CONFIG_ACPI_PCI_SLOT is not set +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_CONTAINER=y +# CONFIG_ACPI_HOTPLUG_MEMORY is not set +# CONFIG_ACPI_SBS is not set +# CONFIG_ACPI_HED is not set +CONFIG_ACPI_CUSTOM_METHOD=y +# CONFIG_ACPI_APEI is not set +# CONFIG_SFI is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_STAT_DETAILS is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y + +# +# x86 CPU frequency scaling drivers +# +# CONFIG_X86_PCC_CPUFREQ is not set +# CONFIG_X86_ACPI_CPUFREQ is not set +# CONFIG_X86_POWERNOW_K8 is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +CONFIG_X86_P4_CLOCKMOD=y + +# +# shared options +# +CONFIG_X86_SPEEDSTEP_LIB=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_INTEL_IDLE=y + +# +# Memory power savings +# +CONFIG_I7300_IDLE_IOAT_CHANNEL=y +CONFIG_I7300_IDLE=y + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_XEN=y +CONFIG_PCI_DOMAINS=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_PCIEAER=y +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIEAER_INJECT=y +CONFIG_PCIEASPM=y +# CONFIG_PCIEASPM_DEBUG is not set +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_PCI_MSI=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCI_STUB is not set +# CONFIG_XEN_PCIDEV_FRONTEND is not set +CONFIG_HT_IRQ=y +CONFIG_PCI_ATS=y +CONFIG_PCI_IOV=y +# CONFIG_PCI_PRI is not set +# CONFIG_PCI_PASID is not set +CONFIG_PCI_IOAPIC=y +CONFIG_PCI_LABEL=y +CONFIG_ISA_DMA_API=y +CONFIG_AMD_NB=y +CONFIG_PCCARD=y +CONFIG_PCMCIA=y +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_CARDBUS=y + +# +# PC-card bridges +# +# CONFIG_YENTA is not set +CONFIG_PD6729=y +CONFIG_I82092=y +CONFIG_PCCARD_NONSTATIC=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_FAKE=y +# CONFIG_HOTPLUG_PCI_ACPI is not set +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=y +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=y +CONFIG_HOTPLUG_PCI_SHPC=y +# CONFIG_RAPIDIO is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +# CONFIG_HAVE_AOUT is not set +CONFIG_BINFMT_MISC=y +CONFIG_IA32_EMULATION=y +CONFIG_IA32_AOUT=y +CONFIG_COMPAT=y +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_KEYS_COMPAT=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_SUB_POLICY=y +CONFIG_XFRM_MIGRATE=y +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_IPCOMP=y +CONFIG_NET_KEY=y +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_ROUTE_CLASSID=y +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +# CONFIG_IP_MROUTE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +CONFIG_INET_TUNNEL=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +CONFIG_INET_LRO=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=y +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_WESTWOOD=y +CONFIG_TCP_CONG_HTCP=y +CONFIG_TCP_CONG_HSTCP=y +CONFIG_TCP_CONG_HYBLA=y +CONFIG_TCP_CONG_VEGAS=y +CONFIG_TCP_CONG_SCALABLE=y +CONFIG_TCP_CONG_LP=y +CONFIG_TCP_CONG_VENO=y +CONFIG_TCP_CONG_YEAH=y +CONFIG_TCP_CONG_ILLINOIS=y +# CONFIG_DEFAULT_BIC is not set +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_HTCP is not set +# CONFIG_DEFAULT_HYBLA is not set +# CONFIG_DEFAULT_VEGAS is not set +# CONFIG_DEFAULT_VENO is not set +# CONFIG_DEFAULT_WESTWOOD is not set +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_MD5SIG=y +CONFIG_IPV6=y +CONFIG_IPV6_PRIVACY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_INET6_XFRM_TUNNEL=y +CONFIG_INET6_TUNNEL=y +CONFIG_INET6_XFRM_MODE_TRANSPORT=y +CONFIG_INET6_XFRM_MODE_TUNNEL=y +CONFIG_INET6_XFRM_MODE_BEET=y +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=y +CONFIG_IPV6_SIT=y +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=y +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_NETWORK_SECMARK=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=y +CONFIG_NETFILTER_NETLINK_QUEUE=y +CONFIG_NETFILTER_NETLINK_LOG=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_BROADCAST=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +CONFIG_NF_CONNTRACK_SNMP=y +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +CONFIG_NF_CONNTRACK_SIP=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NETFILTER_TPROXY=y +CONFIG_NETFILTER_XTABLES=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=y +CONFIG_NETFILTER_XT_CONNMARK=y +CONFIG_NETFILTER_XT_SET=y + +# +# Xtables targets +# +CONFIG_NETFILTER_XT_TARGET_AUDIT=y +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=y +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y +CONFIG_NETFILTER_XT_TARGET_CT=y +CONFIG_NETFILTER_XT_TARGET_DSCP=y +CONFIG_NETFILTER_XT_TARGET_HL=y +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +CONFIG_NETFILTER_XT_TARGET_NOTRACK=y +CONFIG_NETFILTER_XT_TARGET_RATEEST=y +CONFIG_NETFILTER_XT_TARGET_TEE=y +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +CONFIG_NETFILTER_XT_TARGET_SECMARK=y +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y +# CONFIG_NETFILTER_XT_TARGET_ERSPAN is not set +# CONFIG_NETFILTER_XT_TARGET_SPAN is not set +# CONFIG_NETFILTER_XT_TARGET_POLICE is not set +# CONFIG_NETFILTER_XT_TARGET_TRICOLORPOLICE is not set +# CONFIG_NETFILTER_XT_TARGET_SETCLASS is not set +# CONFIG_NETFILTER_XT_TARGET_SETQOS is not set + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y +CONFIG_NETFILTER_XT_MATCH_CLUSTER=y +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +CONFIG_NETFILTER_XT_MATCH_CPU=y +CONFIG_NETFILTER_XT_MATCH_DCCP=y +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y +CONFIG_NETFILTER_XT_MATCH_DSCP=y +CONFIG_NETFILTER_XT_MATCH_ESP=y +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_HL=y +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +CONFIG_NETFILTER_XT_MATCH_IPVS=y +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y +CONFIG_NETFILTER_XT_MATCH_OSF=y +CONFIG_NETFILTER_XT_MATCH_OWNER=y +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_RATEEST=y +CONFIG_NETFILTER_XT_MATCH_REALM=y +CONFIG_NETFILTER_XT_MATCH_RECENT=y +CONFIG_NETFILTER_XT_MATCH_SCTP=y +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +CONFIG_NETFILTER_XT_MATCH_TCPMSS=y +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +CONFIG_IP_SET=y +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=y +CONFIG_IP_SET_BITMAP_IPMAC=y +CONFIG_IP_SET_BITMAP_PORT=y +CONFIG_IP_SET_HASH_IP=y +CONFIG_IP_SET_HASH_IPPORT=y +CONFIG_IP_SET_HASH_IPPORTIP=y +CONFIG_IP_SET_HASH_IPPORTNET=y +CONFIG_IP_SET_HASH_NET=y +CONFIG_IP_SET_HASH_NETPORT=y +CONFIG_IP_SET_HASH_NETIFACE=y +CONFIG_IP_SET_LIST_SET=y +CONFIG_IP_VS=y +CONFIG_IP_VS_IPV6=y +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=y +CONFIG_IP_VS_WRR=y +CONFIG_IP_VS_LC=y +CONFIG_IP_VS_WLC=y +CONFIG_IP_VS_LBLC=y +CONFIG_IP_VS_LBLCR=y +CONFIG_IP_VS_DH=y +CONFIG_IP_VS_SH=y +CONFIG_IP_VS_SED=y +CONFIG_IP_VS_NQ=y + +# +# IPVS application helper +# +CONFIG_IP_VS_FTP=y +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PE_SIP=y + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=y +CONFIG_NF_CONNTRACK_IPV4=y +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_TARGET_LOG=y +CONFIG_IP_NF_TARGET_ULOG=y +CONFIG_NF_NAT=y +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_NF_NAT_SNMP_BASIC=y +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_GRE=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_PROTO_SCTP=y +CONFIG_NF_NAT_FTP=y +CONFIG_NF_NAT_IRC=y +CONFIG_NF_NAT_TFTP=y +CONFIG_NF_NAT_AMANDA=y +CONFIG_NF_NAT_PPTP=y +CONFIG_NF_NAT_H323=y +CONFIG_NF_NAT_SIP=y +CONFIG_IP_NF_MANGLE=y +CONFIG_IP_NF_TARGET_CLUSTERIP=y +CONFIG_IP_NF_TARGET_ECN=y +CONFIG_IP_NF_TARGET_TTL=y +CONFIG_IP_NF_RAW=y +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=y +CONFIG_NF_CONNTRACK_IPV6=y +CONFIG_IP6_NF_QUEUE=y +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_AH=y +CONFIG_IP6_NF_MATCH_EUI64=y +CONFIG_IP6_NF_MATCH_FRAG=y +CONFIG_IP6_NF_MATCH_OPTS=y +CONFIG_IP6_NF_MATCH_HL=y +CONFIG_IP6_NF_MATCH_IPV6HEADER=y +CONFIG_IP6_NF_MATCH_MH=y +CONFIG_IP6_NF_MATCH_RT=y +CONFIG_IP6_NF_TARGET_HL=y +CONFIG_IP6_NF_TARGET_LOG=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +# CONFIG_IP_DCCP is not set +CONFIG_IP_SCTP=y +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SCTP_HMAC_MD5=y +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_XPS=y +CONFIG_HAVE_BPF_JIT=y +# CONFIG_BPF_JIT is not set + +# +# Network testing +# +CONFIG_NET_PKTGEN=y +CONFIG_NET_DROP_MONITOR=y +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +CONFIG_AF_RXRPC=y +# CONFIG_AF_RXRPC_DEBUG is not set +# CONFIG_RXKAD is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +CONFIG_LIB80211=y +# CONFIG_LIB80211_DEBUG is not set + +# +# CFG80211 needs to be enabled for MAC80211 +# +# CONFIG_WIMAX is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +CONFIG_CEPH_LIB=y +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set +# CONFIG_NFC is not set +CONFIG_HAVE_BPF_JIT=y + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +# CONFIG_DEVTMPFS_MOUNT is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_FIRMWARE_IN_KERNEL is not set +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +CONFIG_SYS_HYPERVISOR=y +# CONFIG_GENERIC_CPU_DEVICES is not set +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y +# CONFIG_MTD is not set +# CONFIG_PARPORT is not set +CONFIG_PNP=y +CONFIG_PNP_DEBUG_MESSAGES=y + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +CONFIG_BLK_DEV_NBD=y +# CONFIG_BLK_DEV_OSD is not set +CONFIG_BLK_DEV_SX8=y +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +# CONFIG_BLK_DEV_XIP is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_XEN_BLKDEV_FRONTEND is not set +# CONFIG_XEN_BLKDEV_BACKEND is not set +CONFIG_VIRTIO_BLK=y +# CONFIG_BLK_DEV_HD is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_SENSORS_LIS3LV02D is not set +CONFIG_MISC_DEVICES=y +# CONFIG_AD525X_DPOT is not set +# CONFIG_IBM_ASM is not set +# CONFIG_PHANTOM is not set +# CONFIG_INTEL_MID_PTI is not set +# CONFIG_SGI_IOC4 is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HP_ILO is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1780 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +CONFIG_TI_DAC7512=y +# CONFIG_VMWARE_BALLOON is not set +# CONFIG_BMP085 is not set +# CONFIG_PCH_PHUB is not set +# CONFIG_USB_SWITCH_FSA9480 is not set +CONFIG_EARLY_DMA_ALLOC=y +CONFIG_EDA_DEF_SIZE=0x04000000 +CONFIG_EDA_DEF_ALIGN=0x00100000 +# CONFIG_RETIMER_CLASS is not set +# CONFIG_DS100DF410 is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=y +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +CONFIG_EEPROM_93CX6=y +# CONFIG_EEPROM_93XX46 is not set +CONFIG_CB710_CORE=y +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y +# CONFIG_IWMC3200TOP is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# CONFIG_SENSORS_LIS3_I2C is not set + +# +# Altera FPGA firmware download module +# +# CONFIG_ALTERA_STAPL is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +CONFIG_RAID_ATTRS=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=y +CONFIG_SCSI_NETLINK=y +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +CONFIG_CHR_DEV_SG=y +# CONFIG_CHR_DEV_SCH is not set +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_SCSI_FC_ATTRS=y +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_ISCSI_ATTRS=y +CONFIG_SCSI_SAS_ATTRS=y +CONFIG_SCSI_SAS_LIBSAS=y +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SRP_ATTRS=y +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=y +CONFIG_ISCSI_BOOT_SYSFS=y +CONFIG_SCSI_CXGB3_ISCSI=y +CONFIG_SCSI_CXGB4_ISCSI=y +CONFIG_SCSI_BNX2_ISCSI=y +CONFIG_SCSI_BNX2X_FCOE=y +CONFIG_BE2ISCSI=y +CONFIG_BLK_DEV_3W_XXXX_RAID=y +CONFIG_SCSI_HPSA=y +CONFIG_SCSI_3W_9XXX=y +CONFIG_SCSI_3W_SAS=y +CONFIG_SCSI_ACARD=y +CONFIG_SCSI_AACRAID=y +CONFIG_SCSI_AIC7XXX=y +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_RESET_DELAY_MS=15000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC7XXX_OLD=y +CONFIG_SCSI_AIC79XX=y +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +CONFIG_AIC79XX_DEBUG_ENABLE=y +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC94XX=y +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_SCSI_MVSAS=y +# CONFIG_SCSI_MVSAS_DEBUG is not set +# CONFIG_SCSI_MVSAS_TASKLET is not set +CONFIG_SCSI_MVUMI=y +CONFIG_SCSI_DPT_I2O=y +CONFIG_SCSI_ADVANSYS=y +CONFIG_SCSI_ARCMSR=y +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=y +CONFIG_MEGARAID_MAILBOX=y +CONFIG_MEGARAID_LEGACY=y +CONFIG_MEGARAID_SAS=y +CONFIG_SCSI_MPT2SAS=y +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +# CONFIG_SCSI_MPT2SAS_LOGGING is not set +CONFIG_SCSI_HPTIOP=y +CONFIG_SCSI_BUSLOGIC=y +CONFIG_VMWARE_PVSCSI=y +CONFIG_LIBFC=y +CONFIG_LIBFCOE=y +CONFIG_FCOE=y +CONFIG_FCOE_FNIC=y +CONFIG_SCSI_DMX3191D=y +CONFIG_SCSI_EATA=y +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_FUTURE_DOMAIN=y +CONFIG_SCSI_GDTH=y +CONFIG_SCSI_ISCI=y +CONFIG_SCSI_IPS=y +CONFIG_SCSI_INITIO=y +CONFIG_SCSI_INIA100=y +CONFIG_SCSI_STEX=y +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_IPR=y +# CONFIG_SCSI_IPR_TRACE is not set +# CONFIG_SCSI_IPR_DUMP is not set +CONFIG_SCSI_QLOGIC_1280=y +CONFIG_SCSI_QLA_FC=y +CONFIG_SCSI_QLA_ISCSI=y +CONFIG_SCSI_LPFC=y +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +CONFIG_SCSI_DC395x=y +CONFIG_SCSI_DC390T=y +CONFIG_SCSI_DEBUG=y +CONFIG_SCSI_PMCRAID=y +CONFIG_SCSI_PM8001=y +CONFIG_SCSI_SRP=y +CONFIG_SCSI_BFA_FC=y +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +# CONFIG_PCMCIA_AHA152X is not set +# CONFIG_PCMCIA_FDOMAIN is not set +# CONFIG_PCMCIA_QLOGIC is not set +# CONFIG_PCMCIA_SYM53C500 is not set +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_RDAC=y +CONFIG_SCSI_DH_HP_SW=y +CONFIG_SCSI_DH_EMC=y +CONFIG_SCSI_DH_ALUA=y +CONFIG_SCSI_OSD_INITIATOR=y +CONFIG_SCSI_OSD_ULD=y +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +# CONFIG_SCSI_OSD_DEBUG is not set +CONFIG_ATA=y +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_ACPI=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI=y +CONFIG_SATA_AHCI_PLATFORM=y +# CONFIG_SATA_INIC162X is not set +CONFIG_SATA_ACARD_AHCI=y +CONFIG_SATA_SIL24=y +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +CONFIG_PDC_ADMA=y +CONFIG_SATA_QSTOR=y +CONFIG_SATA_SX4=y +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=y +CONFIG_SATA_MV=y +CONFIG_SATA_NV=y +CONFIG_SATA_PROMISE=y +CONFIG_SATA_SIL=y +CONFIG_SATA_SIS=y +CONFIG_SATA_SVW=y +CONFIG_SATA_ULI=y +CONFIG_SATA_VIA=y +CONFIG_SATA_VITESSE=y + +# +# PATA SFF controllers with BMDMA +# +CONFIG_PATA_ALI=y +CONFIG_PATA_AMD=y +CONFIG_PATA_ARTOP=y +CONFIG_PATA_ATIIXP=y +CONFIG_PATA_ATP867X=y +CONFIG_PATA_CMD64X=y +CONFIG_PATA_CS5520=y +CONFIG_PATA_CS5530=y +# CONFIG_PATA_CS5536 is not set +# CONFIG_PATA_CYPRESS is not set +CONFIG_PATA_EFAR=y +CONFIG_PATA_HPT366=y +CONFIG_PATA_HPT37X=y +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +CONFIG_PATA_IT8213=y +CONFIG_PATA_IT821X=y +CONFIG_PATA_JMICRON=y +CONFIG_PATA_MARVELL=y +CONFIG_PATA_NETCELL=y +CONFIG_PATA_NINJA32=y +CONFIG_PATA_NS87415=y +CONFIG_PATA_OLDPIIX=y +# CONFIG_PATA_OPTIDMA is not set +CONFIG_PATA_PDC2027X=y +CONFIG_PATA_PDC_OLD=y +# CONFIG_PATA_RADISYS is not set +CONFIG_PATA_RDC=y +CONFIG_PATA_SC1200=y +CONFIG_PATA_SCH=y +CONFIG_PATA_SERVERWORKS=y +CONFIG_PATA_SIL680=y +CONFIG_PATA_SIS=y +CONFIG_PATA_TOSHIBA=y +CONFIG_PATA_TRIFLEX=y +CONFIG_PATA_VIA=y +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +CONFIG_PATA_MPIIX=y +CONFIG_PATA_NS87410=y +# CONFIG_PATA_OPTI is not set +CONFIG_PATA_PCMCIA=y +CONFIG_PATA_PLATFORM=y +CONFIG_PATA_RZ1000=y + +# +# Generic fallback / legacy drivers +# +# CONFIG_PATA_ACPI is not set +CONFIG_ATA_GENERIC=y +# CONFIG_PATA_LEGACY is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=y +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=y +# CONFIG_DM_SNAPSHOT is not set +# CONFIG_DM_THIN_PROVISIONING is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_RAID is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_DM_FLAKEY is not set +# CONFIG_TARGET_CORE is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=y +CONFIG_FIREWIRE_OHCI=y +CONFIG_FIREWIRE_OHCI_DEBUG=y +CONFIG_FIREWIRE_SBP2=y +CONFIG_FIREWIRE_NET=y +CONFIG_FIREWIRE_NOSY=y +# CONFIG_I2O is not set +# CONFIG_MACINTOSH_DRIVERS is not set +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +# CONFIG_DUMMY is not set +# CONFIG_EQUALIZER is not set +# CONFIG_NET_FC is not set +CONFIG_MII=y +# CONFIG_MACVLAN is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set +CONFIG_TUN=y +CONFIG_VETH=y +CONFIG_VIRTIO_NET=y +# CONFIG_ARCNET is not set + +# +# CAIF transport drivers +# +CONFIG_ETHERNET=y +CONFIG_MDIO=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_B44=y +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_BNX2=y +CONFIG_CNIC=y +CONFIG_TIGON3=y +CONFIG_BNX2X=y +# CONFIG_NET_VENDOR_BROCADE is not set +CONFIG_NET_VENDOR_CHELSIO=y +# CONFIG_CHELSIO_T1 is not set +CONFIG_CHELSIO_T3=y +CONFIG_CHELSIO_T4=y +CONFIG_CHELSIO_T4VF=y +# CONFIG_NET_VENDOR_CISCO is not set +# CONFIG_DNET is not set +# CONFIG_NET_VENDOR_DEC is not set +# CONFIG_NET_VENDOR_DLINK is not set +# CONFIG_NET_VENDOR_EMULEX is not set +# CONFIG_NET_VENDOR_EXAR is not set +# CONFIG_NET_VENDOR_FUJITSU is not set +# CONFIG_NET_VENDOR_HP is not set +CONFIG_NET_VENDOR_INTEL=y +# CONFIG_E100 is not set +CONFIG_E1000=y +CONFIG_E1000E=y +# CONFIG_E1000E_PTP is not set +CONFIG_IGB=y +CONFIG_IGB_HWMON=y +# CONFIG_IGB_PTP is not set +CONFIG_IGBVF=y +CONFIG_IXGB=y +CONFIG_IXGBE=y +CONFIG_IXGBEVF=y +CONFIG_NET_VENDOR_I825XX=y +# CONFIG_ZNET is not set +# CONFIG_IP1000 is not set +# CONFIG_JME is not set +# CONFIG_NET_VENDOR_MARVELL is not set +CONFIG_NET_VENDOR_MELLANOX=y +# CONFIG_MLX4_EN is not set +# CONFIG_MLX4_CORE is not set +# CONFIG_NET_VENDOR_MICREL is not set +CONFIG_NET_VENDOR_MICROCHIP=y +CONFIG_ENC28J60=y +CONFIG_ENC28J60_WRITEVERIFY=y +# CONFIG_NET_VENDOR_MYRI is not set +# CONFIG_FEALNX is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NVIDIA is not set +# CONFIG_NET_VENDOR_OKI is not set +# CONFIG_ETHOC is not set +# CONFIG_NET_PACKET_ENGINE is not set +# CONFIG_NET_VENDOR_QLOGIC is not set +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_ATP=y +CONFIG_8139CP=y +# CONFIG_8139TOO is not set +# CONFIG_8139TOO_PIO is not set +CONFIG_8139TOO_TUNE_TWISTER=y +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_R8169=y +# CONFIG_NET_VENDOR_RDC is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_SFC is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SUN is not set +# CONFIG_NET_VENDOR_TEHUTI is not set +# CONFIG_NET_VENDOR_TI is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_XIRCOM is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_NET_SB1000 is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +CONFIG_MARVELL_PHY=y +CONFIG_DAVICOM_PHY=y +CONFIG_QSEMI_PHY=y +CONFIG_LXT_PHY=y +CONFIG_CICADA_PHY=y +CONFIG_VITESSE_PHY=y +CONFIG_SMSC_PHY=y +CONFIG_BROADCOM_PHY=y +# CONFIG_ICPLUS_PHY is not set +CONFIG_REALTEK_PHY=y +CONFIG_NATIONAL_PHY=y +CONFIG_STE10XP=y +CONFIG_LSI_ET1011C_PHY=y +CONFIG_MICREL_PHY=y +CONFIG_FIXED_PHY=y +CONFIG_MDIO_BITBANG=y +# CONFIG_MDIO_GPIO is not set +CONFIG_PPP=y +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_FILTER is not set +# CONFIG_PPP_MPPE is not set +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPPOE is not set +# CONFIG_PPP_ASYNC is not set +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_SLIP is not set +CONFIG_SLHC=y +# CONFIG_TR is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_WLAN is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +# CONFIG_WAN is not set +# CONFIG_XEN_NETDEV_FRONTEND is not set +# CONFIG_XEN_NETDEV_BACKEND is not set +# CONFIG_VMXNET3 is not set +# CONFIG_DPAA_ETH_USE_NDO_SELECT_QUEUE is not set +# CONFIG_ISDN is not set +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=y +CONFIG_INPUT_POLLDEV=y +CONFIG_INPUT_SPARSEKMAP=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_ROCKETPORT is not set +# CONFIG_CYCLADES is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +# CONFIG_SYNCLINK is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_SYNCLINK_GT is not set +# CONFIG_NOZOMI is not set +# CONFIG_ISI is not set +# CONFIG_N_HDLC is not set +# CONFIG_N_GSM is not set +# CONFIG_TRACE_SINK is not set +# CONFIG_DEVKMEM is not set +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_CS=y +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX3107 is not set +CONFIG_SERIAL_MFD_HSU=y +# CONFIG_SERIAL_MFD_HSU_CONSOLE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_JSM=y +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_IFX6X60 is not set +CONFIG_SERIAL_PCH_UART=y +# CONFIG_SERIAL_XILINX_PS_UART is not set +# CONFIG_TTY_PRINTK is not set +CONFIG_HVC_DRIVER=y +# CONFIG_HVC_XEN is not set +CONFIG_VIRTIO_CONSOLE=y +# CONFIG_IPMI_HANDLER is not set +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_TIMERIOMEM=y +CONFIG_HW_RANDOM_INTEL=y +CONFIG_HW_RANDOM_AMD=y +CONFIG_HW_RANDOM_VIA=y +CONFIG_HW_RANDOM_VIRTIO=y +CONFIG_NVRAM=y +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# PCMCIA character devices +# +CONFIG_SYNCLINK_CS=y +CONFIG_CARDMAN_4000=y +CONFIG_CARDMAN_4040=y +CONFIG_IPWIRELESS=y +# CONFIG_MWAVE is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HPET is not set +# CONFIG_HANGCHECK_TIMER is not set +# CONFIG_TCG_TPM is not set +# CONFIG_TELCLOCK is not set +CONFIG_DEVPORT=y +# CONFIG_RAMOOPS is not set +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_MUX_GPIO=y +CONFIG_I2C_MUX_PCA9541=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=y +CONFIG_I2C_ALGOPCA=y + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +CONFIG_I2C_I801=y +CONFIG_I2C_ISCH=y +CONFIG_I2C_ISMT=y +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# ACPI drivers +# +# CONFIG_I2C_SCMI is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_DESIGNWARE_PCI is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_INTEL_MID is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_PCA_PLATFORM=y +# CONFIG_I2C_PXA_PCI is not set +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_XILINX is not set +# CONFIG_I2C_EG20T is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_PARPORT_LIGHT is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_TOPCLIFF_PCH is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set + +# +# PPS support +# +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PPS_CLIENT_GPIO is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +# CONFIG_PTP_1588_CLOCK is not set +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_GPIOLIB=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC=y +CONFIG_GPIO_MAX730X=y + +# +# Memory mapped GPIO drivers: +# +CONFIG_GPIO_GENERIC_PLATFORM=y +# CONFIG_GPIO_IT8761E is not set +CONFIG_GPIO_SCH=y +# CONFIG_GPIO_VX855 is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +CONFIG_GPIO_PCA953X=y +# CONFIG_GPIO_PCA953X_IRQ is not set +CONFIG_GPIO_PCF857X=y +# CONFIG_GPIO_SX150X is not set +# CONFIG_GPIO_ADP5588 is not set + +# +# PCI GPIO expanders: +# +# CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_LANGWELL is not set +# CONFIG_GPIO_PCH is not set +# CONFIG_GPIO_ML_IOH is not set +# CONFIG_GPIO_RDC321X is not set + +# +# SPI GPIO expanders: +# +CONFIG_GPIO_MAX7301=y +# CONFIG_GPIO_MCP23S08 is not set +CONFIG_GPIO_MC33880=y +CONFIG_GPIO_74X164=y + +# +# AC97 GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_BQ20Z75 is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_GPIO is not set +CONFIG_HWMON=y +CONFIG_HWMON_VID=y +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +# CONFIG_SENSORS_ABITUGURU is not set +# CONFIG_SENSORS_ABITUGURU3 is not set +# CONFIG_SENSORS_AD7314 is not set +# CONFIG_SENSORS_AD7414 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADCXX is not set +CONFIG_SENSORS_ADM1021=y +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7411 is not set +# CONFIG_SENSORS_ADT7462 is not set +CONFIG_SENSORS_ADT7470=y +# CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_K8TEMP is not set +# CONFIG_SENSORS_K10TEMP is not set +# CONFIG_SENSORS_FAM15H_POWER is not set +# CONFIG_SENSORS_ASB100 is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_DS620 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_I5K_AMB is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_FSCHMD is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +CONFIG_SENSORS_GPIO_FAN=y +CONFIG_SENSORS_CORETEMP=y +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_JC42 is not set +# CONFIG_SENSORS_LINEAGE is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM73 is not set +CONFIG_SENSORS_LM75=y +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +CONFIG_SENSORS_LM85=y +# CONFIG_SENSORS_LM87 is not set +CONFIG_SENSORS_LM90=y +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +CONFIG_SENSORS_LTC4151=y +CONFIG_SENSORS_LTC4215=y +CONFIG_SENSORS_LTC4245=y +CONFIG_SENSORS_LTC4261=y +# CONFIG_SENSORS_LM95241 is not set +# CONFIG_SENSORS_LM95245 is not set +# CONFIG_SENSORS_MAX1111 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6642 is not set +CONFIG_SENSORS_MAX6650=y +CONFIG_SENSORS_MAX6620=y +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_NTC_THERMISTOR is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_PCF8591 is not set +CONFIG_PMBUS=y +CONFIG_SENSORS_PMBUS=y +# CONFIG_SENSORS_ADM1275 is not set +# CONFIG_SENSORS_LM25066 is not set +# CONFIG_SENSORS_LTC2978 is not set +# CONFIG_SENSORS_MAX16064 is not set +# CONFIG_SENSORS_MAX34440 is not set +# CONFIG_SENSORS_MAX8688 is not set +# CONFIG_SENSORS_UCD9000 is not set +# CONFIG_SENSORS_UCD9200 is not set +# CONFIG_SENSORS_ZL6100 is not set +# CONFIG_SENSORS_SHT15 is not set +# CONFIG_SENSORS_SHT21 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_SMM665 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC6W201 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH56XX_COMMON is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set +# CONFIG_SENSORS_ADS1015 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_ADS7871 is not set +# CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP102 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set +# CONFIG_SENSORS_VIA_CPUTEMP is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +CONFIG_SENSORS_W83781D=y +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83795 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +# CONFIG_SENSORS_APPLESMC is not set + +# +# ACPI drivers +# +# CONFIG_SENSORS_ACPI_POWER is not set +# CONFIG_SENSORS_ATK0110 is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_ALIM1535_WDT is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_F71808E_WDT is not set +# CONFIG_SP5100_TCO is not set +# CONFIG_SC520_WDT is not set +# CONFIG_SBC_FITPC2_WATCHDOG is not set +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_IBMASR is not set +# CONFIG_WAFER_WDT is not set +# CONFIG_I6300ESB_WDT is not set +CONFIG_ITCO_WDT=y +# CONFIG_ITCO_VENDOR_SUPPORT is not set +# CONFIG_IT8712F_WDT is not set +# CONFIG_IT87_WDT is not set +# CONFIG_HP_WATCHDOG is not set +# CONFIG_SC1200_WDT is not set +# CONFIG_PC87413_WDT is not set +# CONFIG_NV_TCO is not set +# CONFIG_60XX_WDT is not set +# CONFIG_SBC8360_WDT is not set +# CONFIG_CPU5_WDT is not set +# CONFIG_SMSC_SCH311X_WDT is not set +# CONFIG_SMSC37B787_WDT is not set +# CONFIG_W83627HF_WDT is not set +# CONFIG_W83697HF_WDT is not set +# CONFIG_W83697UG_WDT is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_W83977F_WDT is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_SBC_EPX_C3_WATCHDOG is not set +# CONFIG_XEN_WDT is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=y +CONFIG_SSB_SPROM=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +# CONFIG_SSB_B43_PCI_BRIDGE is not set +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y +CONFIG_SSB_PCMCIAHOST=y +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +# CONFIG_SSB_SILENT is not set +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_BCMA_POSSIBLE=y + +# +# Broadcom specific AMBA +# +CONFIG_BCMA=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +# CONFIG_BCMA_DEBUG is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_TC3589X is not set +# CONFIG_MFD_TMIO is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_MC13XXX is not set +# CONFIG_ABX500_CORE is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_MFD_CS5535 is not set +# CONFIG_MFD_TIMBERDALE is not set +CONFIG_LPC_ICH=y +CONFIG_LPC_SCH=y +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_VX855 is not set +CONFIG_MFD_WL1273_CORE=y +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_REGULATOR is not set +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_AGP is not set +# CONFIG_VGA_ARB is not set +# CONFIG_VGA_SWITCHEROO is not set +# CONFIG_DRM is not set +# CONFIG_STUB_POULSBO is not set +# CONFIG_VGASTATE is not set +# CONFIG_VIDEO_OUTPUT_CONTROL is not set +# CONFIG_FB is not set +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +CONFIG_DISPLAY_SUPPORT=y + +# +# Display hardware drivers +# + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_DUMMY_CONSOLE=y +# CONFIG_SOUND is not set +# CONFIG_HID_SUPPORT is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB_ARCH_HAS_XHCI=y +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +# CONFIG_USB_DEVICEFS is not set +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_BLACKLIST_HUB is not set +# CONFIG_USB_DWC3 is not set +# CONFIG_USB_MON is not set +# CONFIG_USB_WUSB is not set +# CONFIG_USB_WUSB_CBAF is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +# CONFIG_USB_XHCI_HCD_DEBUGGING is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_HCD_SSB is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +# CONFIG_USB_HWA_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set + +# +# USB port drivers +# +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +# CONFIG_USB_EZUSB is not set +# CONFIG_USB_SERIAL_GENERIC is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +# CONFIG_USB_SERIAL_CP210X is not set +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_FUNSOFT is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_IUU is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MOTOROLA is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_HP4X is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIEMENS_MPI is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_SYMBOL is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set +# CONFIG_USB_SERIAL_ZIO is not set +# CONFIG_USB_SERIAL_SSU100 is not set +# CONFIG_USB_SERIAL_DEBUG is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_GADGET is not set + +# +# OTG and related infrastructure +# +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_UWB is not set +CONFIG_MMC=y +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set +# CONFIG_MMC_CLKGATE is not set + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_BLOCK_BOUNCE=y +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PCI=y +# CONFIG_MMC_RICOH_MMC is not set +CONFIG_MMC_SDHCI_PLTFM=y +# CONFIG_MMC_WBSD is not set +# CONFIG_MMC_TIFM_SD is not set +CONFIG_MMC_SPI=y +# CONFIG_MMC_SDRICOH_CS is not set +# CONFIG_MMC_CB710 is not set +# CONFIG_MMC_VIA_SDMMC is not set +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_PCA9532 is not set +# CONFIG_LEDS_GPIO is not set +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP5521 is not set +# CONFIG_LEDS_LP5523 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_INTEL_SS4200 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_TRIGGERS is not set + +# +# LED Triggers +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_DS1374=y +CONFIG_RTC_DRV_DS1672=y +CONFIG_RTC_DRV_DS3232=y +CONFIG_RTC_DRV_MAX6900=y +CONFIG_RTC_DRV_RS5C372=y +CONFIG_RTC_DRV_ISL1208=y +CONFIG_RTC_DRV_ISL12022=y +CONFIG_RTC_DRV_X1205=y +CONFIG_RTC_DRV_PCF8563=y +CONFIG_RTC_DRV_PCF8583=y +CONFIG_RTC_DRV_M41T80=y +# CONFIG_RTC_DRV_M41T80_WDT is not set +CONFIG_RTC_DRV_BQ32K=y +CONFIG_RTC_DRV_S35390A=y +CONFIG_RTC_DRV_FM3130=y +CONFIG_RTC_DRV_RX8581=y +CONFIG_RTC_DRV_RX8025=y +# CONFIG_RTC_DRV_EM3027 is not set +# CONFIG_RTC_DRV_RV3029C2 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_DS3234 is not set +# CONFIG_RTC_DRV_PCF2123 is not set + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_DS1286=y +CONFIG_RTC_DRV_DS1511=y +CONFIG_RTC_DRV_DS1553=y +CONFIG_RTC_DRV_DS1742=y +CONFIG_RTC_DRV_STK17TA8=y +CONFIG_RTC_DRV_M48T86=y +CONFIG_RTC_DRV_M48T35=y +CONFIG_RTC_DRV_M48T59=y +CONFIG_RTC_DRV_MSM6242=y +CONFIG_RTC_DRV_BQ4802=y +CONFIG_RTC_DRV_RP5C01=y +CONFIG_RTC_DRV_V3020=y + +# +# on-CPU RTC drivers +# +# CONFIG_DMADEVICES is not set +# CONFIG_AUXDISPLAY is not set +CONFIG_UIO=y +# CONFIG_UIO_CIF is not set +# CONFIG_UIO_PDRV is not set +# CONFIG_UIO_PDRV_GENIRQ is not set +# CONFIG_UIO_AEC is not set +# CONFIG_UIO_SERCOS3 is not set +# CONFIG_UIO_PCI_GENERIC is not set +# CONFIG_UIO_NETX is not set +CONFIG_VIRTIO=y +CONFIG_VIRTIO_RING=y + +# +# Virtio drivers +# +CONFIG_VIRTIO_PCI=y +# CONFIG_VIRTIO_BALLOON is not set +# CONFIG_VIRTIO_MMIO is not set + +# +# Xen driver support +# +CONFIG_XEN_BALLOON=y +# CONFIG_XEN_BALLOON_MEMORY_HOTPLUG is not set +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_DEV_EVTCHN=y +CONFIG_XEN_BACKEND=y +CONFIG_XENFS=y +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_GNTDEV=y +CONFIG_XEN_GRANT_DEV_ALLOC=y +CONFIG_SWIOTLB_XEN=y +CONFIG_XEN_PCIDEV_BACKEND=m +# CONFIG_STAGING is not set +CONFIG_X86_PLATFORM_DEVICES=y +# CONFIG_ACERHDF is not set +# CONFIG_ASUS_LAPTOP is not set +# CONFIG_HP_ACCEL is not set +# CONFIG_THINKPAD_ACPI is not set +# CONFIG_SENSORS_HDAPS is not set +# CONFIG_INTEL_MENLOW is not set +# CONFIG_EEEPC_LAPTOP is not set +# CONFIG_ACPI_WMI is not set +# CONFIG_ACPI_ASUS is not set +# CONFIG_TOPSTAR_LAPTOP is not set +# CONFIG_TOSHIBA_BT_RFKILL is not set +# CONFIG_ACPI_CMPC is not set +# CONFIG_INTEL_IPS is not set +# CONFIG_IBM_RTL is not set +# CONFIG_XO15_EBOOK is not set + +# +# Hardware Spinlock drivers +# +CONFIG_CLKEVT_I8253=y +CONFIG_I8253_LOCK=y +CONFIG_CLKBLD_I8253=y +CONFIG_IOMMU_SUPPORT=y +# CONFIG_AMD_IOMMU is not set +# CONFIG_INTEL_IOMMU is not set +# CONFIG_IRQ_REMAP is not set +# CONFIG_VIRT_DRIVERS is not set +# CONFIG_HYPERV is not set +# CONFIG_PM_DEVFREQ is not set + +# +# Firmware Drivers +# +CONFIG_EDD=y +# CONFIG_EDD_OFF is not set +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_DELL_RBU=y +CONFIG_DCDBAS=y +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=y +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_IBFT=y +# CONFIG_SIGMA is not set +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_DEFAULTS_TO_ORDERED=y +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_XATTR=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_INOTIFY_STACKFS=y +CONFIG_FANOTIFY=y +# CONFIG_QUOTA is not set +# CONFIG_QUOTACTL is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set +CONFIG_OVERLAYFS_FS=y +CONFIG_GENERIC_ACL=y + +# +# Caches +# +CONFIG_FSCACHE=y +CONFIG_FSCACHE_STATS=y +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=y +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_VMCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_PSTORE is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_EXOFS_FS is not set +CONFIG_ORE=m +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_V4_1=y +CONFIG_PNFS_FILE_LAYOUT=y +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_OBJLAYOUT=m +# CONFIG_NFS_FSCACHE is not set +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +# CONFIG_NFS_USE_NEW_IDMAPPER is not set +CONFIG_NFSD=y +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_SUNRPC_BACKCHANNEL=y +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_CEPH_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +CONFIG_ACORN_PARTITION=y +CONFIG_ACORN_PARTITION_CUMANA=y +CONFIG_ACORN_PARTITION_EESOX=y +CONFIG_ACORN_PARTITION_ICS=y +CONFIG_ACORN_PARTITION_ADFS=y +CONFIG_ACORN_PARTITION_POWERTEC=y +CONFIG_ACORN_PARTITION_RISCIX=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_KARMA_PARTITION=y +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +CONFIG_ENABLE_WARN_DEPRECATED=y +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=2048 +CONFIG_MAGIC_SYSRQ=y +CONFIG_STRIP_ASM_SYMS=y +CONFIG_UNUSED_SYMBOLS=y +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_LOCKUP_DETECTOR=y +CONFIG_HARDLOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +CONFIG_PANIC_TIMEOUT=5 +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_SPARSE_RCU_POINTER is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +CONFIG_STACKTRACE=y +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_DEBUG_LIST is not set +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +# CONFIG_FRAME_POINTER is not set +CONFIG_BOOT_PRINTK_DELAY=y +# CONFIG_RCU_TORTURE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_LKDTM is not set +# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y +# CONFIG_DEBUG_PAGEALLOC is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_EVENT_POWER_TRACING_DEPRECATED=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_FTRACE_SYSCALLS is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_STACK_TRACER is not set +CONFIG_BLK_DEV_IO_TRACE=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_MMIOTRACE is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +CONFIG_HAVE_ARCH_KMEMCHECK=y +# CONFIG_TEST_KSTRTOX is not set +CONFIG_STRICT_DEVMEM=y +CONFIG_X86_VERBOSE_BOOTUP=y +CONFIG_EARLY_PRINTK=y +# CONFIG_EARLY_PRINTK_DBGP is not set +# CONFIG_DEBUG_STACKOVERFLOW is not set +# CONFIG_X86_PTDUMP is not set +CONFIG_DEBUG_RODATA=y +# CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_SET_MODULE_RONX is not set +# CONFIG_DEBUG_NX_TEST is not set +# CONFIG_IOMMU_DEBUG is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +# CONFIG_DEBUG_BOOT_PARAMS is not set +# CONFIG_CPA_DEBUG is not set +CONFIG_OPTIMIZE_INLINING=y +# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_XOR=m +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_FIPS=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=y +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_USER is not set +# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_NULL=y +# CONFIG_CRYPTO_PCRYPT is not set +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_CRYPTD=y +CONFIG_CRYPTO_AUTHENC=y +# CONFIG_CRYPTO_TEST is not set + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_SEQIV=y + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_LRW=y +CONFIG_CRYPTO_PCBC=y +CONFIG_CRYPTO_XTS=y + +# +# Hash modes +# +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=y +CONFIG_CRYPTO_VMAC=y + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32C_INTEL=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_MD4=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=y +CONFIG_CRYPTO_RMD128=y +CONFIG_CRYPTO_RMD160=y +CONFIG_CRYPTO_RMD256=y +CONFIG_CRYPTO_RMD320=y +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA1_SSSE3=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_TGR192=y +CONFIG_CRYPTO_WP512=y +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=y + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_X86_64=y +CONFIG_CRYPTO_AES_NI_INTEL=y +CONFIG_CRYPTO_ANUBIS=y +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_BLOWFISH=y +CONFIG_CRYPTO_BLOWFISH_COMMON=y +CONFIG_CRYPTO_BLOWFISH_X86_64=y +CONFIG_CRYPTO_CAMELLIA=y +CONFIG_CRYPTO_CAST5=y +CONFIG_CRYPTO_CAST6=y +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=y +CONFIG_CRYPTO_KHAZAD=y +CONFIG_CRYPTO_SALSA20=y +CONFIG_CRYPTO_SALSA20_X86_64=y +CONFIG_CRYPTO_SEED=y +CONFIG_CRYPTO_SERPENT=y +CONFIG_CRYPTO_TEA=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_TWOFISH_COMMON=y +CONFIG_CRYPTO_TWOFISH_X86_64=y +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=y + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_ZLIB=y +CONFIG_CRYPTO_LZO=y + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_USER_API=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=y +CONFIG_CRYPTO_DEV_PADLOCK_AES=y +CONFIG_CRYPTO_DEV_PADLOCK_SHA=y +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y +CONFIG_CRC8=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=y +CONFIG_TEXTSEARCH_BM=y +CONFIG_TEXTSEARCH_FSM=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y +CONFIG_AVERAGE=y +CONFIG_CORDIC=y diff --git a/packages/base/any/kernels/3.2-lts/patches/kernel-fs-overlayfs-inode.patch b/packages/base/any/kernels/3.2-lts/patches/kernel-fs-overlayfs-inode.patch new file mode 100644 index 00000000..f0e75bd7 --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/patches/kernel-fs-overlayfs-inode.patch @@ -0,0 +1,12 @@ +diff -uNpr a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c +--- a/fs/overlayfs/inode.c 2015-04-07 13:55:17.487864270 -0700 ++++ b/fs/overlayfs/inode.c 2015-04-07 13:56:24.948259512 -0700 +@@ -68,7 +68,7 @@ int ovl_permission(struct inode *inode, + spin_unlock(&inode->i_lock); + return -ENOENT; + } +- alias = list_entry(inode->i_dentry.next, struct dentry, d_alias); ++ alias = list_entry(inode->i_dentry.next, struct dentry, d_u.d_alias); + dget(alias); + spin_unlock(&inode->i_lock); + oe = alias->d_fsdata; diff --git a/packages/base/any/kernels/3.2-lts/patches/kernel-overlayfs-v11.patch b/packages/base/any/kernels/3.2-lts/patches/kernel-overlayfs-v11.patch new file mode 100644 index 00000000..f336a65f --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/patches/kernel-overlayfs-v11.patch @@ -0,0 +1,3178 @@ +--- /dev/null ++++ b/Documentation/filesystems/overlayfs.txt +@@ -0,0 +1,199 @@ ++Written by: Neil Brown ++ ++Overlay Filesystem ++================== ++ ++This document describes a prototype for a new approach to providing ++overlay-filesystem functionality in Linux (sometimes referred to as ++union-filesystems). An overlay-filesystem tries to present a ++filesystem which is the result over overlaying one filesystem on top ++of the other. ++ ++The result will inevitably fail to look exactly like a normal ++filesystem for various technical reasons. The expectation is that ++many use cases will be able to ignore these differences. ++ ++This approach is 'hybrid' because the objects that appear in the ++filesystem do not all appear to belong to that filesystem. In many ++cases an object accessed in the union will be indistinguishable ++from accessing the corresponding object from the original filesystem. ++This is most obvious from the 'st_dev' field returned by stat(2). ++ ++While directories will report an st_dev from the overlay-filesystem, ++all non-directory objects will report an st_dev from the lower or ++upper filesystem that is providing the object. Similarly st_ino will ++only be unique when combined with st_dev, and both of these can change ++over the lifetime of a non-directory object. Many applications and ++tools ignore these values and will not be affected. ++ ++Upper and Lower ++--------------- ++ ++An overlay filesystem combines two filesystems - an 'upper' filesystem ++and a 'lower' filesystem. When a name exists in both filesystems, the ++object in the 'upper' filesystem is visible while the object in the ++'lower' filesystem is either hidden or, in the case of directories, ++merged with the 'upper' object. ++ ++It would be more correct to refer to an upper and lower 'directory ++tree' rather than 'filesystem' as it is quite possible for both ++directory trees to be in the same filesystem and there is no ++requirement that the root of a filesystem be given for either upper or ++lower. ++ ++The lower filesystem can be any filesystem supported by Linux and does ++not need to be writable. The lower filesystem can even be another ++overlayfs. The upper filesystem will normally be writable and if it ++is it must support the creation of trusted.* extended attributes, and ++must provide valid d_type in readdir responses, at least for symbolic ++links - so NFS is not suitable. ++ ++A read-only overlay of two read-only filesystems may use any ++filesystem type. ++ ++Directories ++----------- ++ ++Overlaying mainly involved directories. If a given name appears in both ++upper and lower filesystems and refers to a non-directory in either, ++then the lower object is hidden - the name refers only to the upper ++object. ++ ++Where both upper and lower objects are directories, a merged directory ++is formed. ++ ++At mount time, the two directories given as mount options are combined ++into a merged directory: ++ ++ mount -t overlayfs overlayfs -olowerdir=/lower,upperdir=/upper /overlay ++ ++Then whenever a lookup is requested in such a merged directory, the ++lookup is performed in each actual directory and the combined result ++is cached in the dentry belonging to the overlay filesystem. If both ++actual lookups find directories, both are stored and a merged ++directory is created, otherwise only one is stored: the upper if it ++exists, else the lower. ++ ++Only the lists of names from directories are merged. Other content ++such as metadata and extended attributes are reported for the upper ++directory only. These attributes of the lower directory are hidden. ++ ++whiteouts and opaque directories ++-------------------------------- ++ ++In order to support rm and rmdir without changing the lower ++filesystem, an overlay filesystem needs to record in the upper filesystem ++that files have been removed. This is done using whiteouts and opaque ++directories (non-directories are always opaque). ++ ++The overlay filesystem uses extended attributes with a ++"trusted.overlay." prefix to record these details. ++ ++A whiteout is created as a symbolic link with target ++"(overlay-whiteout)" and with xattr "trusted.overlay.whiteout" set to "y". ++When a whiteout is found in the upper level of a merged directory, any ++matching name in the lower level is ignored, and the whiteout itself ++is also hidden. ++ ++A directory is made opaque by setting the xattr "trusted.overlay.opaque" ++to "y". Where the upper filesystem contains an opaque directory, any ++directory in the lower filesystem with the same name is ignored. ++ ++readdir ++------- ++ ++When a 'readdir' request is made on a merged directory, the upper and ++lower directories are each read and the name lists merged in the ++obvious way (upper is read first, then lower - entries that already ++exist are not re-added). This merged name list is cached in the ++'struct file' and so remains as long as the file is kept open. If the ++directory is opened and read by two processes at the same time, they ++will each have separate caches. A seekdir to the start of the ++directory (offset 0) followed by a readdir will cause the cache to be ++discarded and rebuilt. ++ ++This means that changes to the merged directory do not appear while a ++directory is being read. This is unlikely to be noticed by many ++programs. ++ ++seek offsets are assigned sequentially when the directories are read. ++Thus if ++ - read part of a directory ++ - remember an offset, and close the directory ++ - re-open the directory some time later ++ - seek to the remembered offset ++ ++there may be little correlation between the old and new locations in ++the list of filenames, particularly if anything has changed in the ++directory. ++ ++Readdir on directories that are not merged is simply handled by the ++underlying directory (upper or lower). ++ ++ ++Non-directories ++--------------- ++ ++Objects that are not directories (files, symlinks, device-special ++files etc.) are presented either from the upper or lower filesystem as ++appropriate. When a file in the lower filesystem is accessed in a way ++the requires write-access, such as opening for write access, changing ++some metadata etc., the file is first copied from the lower filesystem ++to the upper filesystem (copy_up). Note that creating a hard-link ++also requires copy_up, though of course creation of a symlink does ++not. ++ ++The copy_up may turn out to be unnecessary, for example if the file is ++opened for read-write but the data is not modified. ++ ++The copy_up process first makes sure that the containing directory ++exists in the upper filesystem - creating it and any parents as ++necessary. It then creates the object with the same metadata (owner, ++mode, mtime, symlink-target etc.) and then if the object is a file, the ++data is copied from the lower to the upper filesystem. Finally any ++extended attributes are copied up. ++ ++Once the copy_up is complete, the overlay filesystem simply ++provides direct access to the newly created file in the upper ++filesystem - future operations on the file are barely noticed by the ++overlay filesystem (though an operation on the name of the file such as ++rename or unlink will of course be noticed and handled). ++ ++ ++Non-standard behavior ++--------------------- ++ ++The copy_up operation essentially creates a new, identical file and ++moves it over to the old name. The new file may be on a different ++filesystem, so both st_dev and st_ino of the file may change. ++ ++Any open files referring to this inode will access the old data and ++metadata. Similarly any file locks obtained before copy_up will not ++apply to the copied up file. ++ ++On a file is opened with O_RDONLY fchmod(2), fchown(2), futimesat(2) ++and fsetxattr(2) will fail with EROFS. ++ ++If a file with multiple hard links is copied up, then this will ++"break" the link. Changes will not be propagated to other names ++referring to the same inode. ++ ++Symlinks in /proc/PID/ and /proc/PID/fd which point to a non-directory ++object in overlayfs will not contain vaid absolute paths, only ++relative paths leading up to the filesystem's root. This will be ++fixed in the future. ++ ++Some operations are not atomic, for example a crash during copy_up or ++rename will leave the filesystem in an inconsitent state. This will ++be addressed in the future. ++ ++Changes to underlying filesystems ++--------------------------------- ++ ++Offline changes, when the overlay is not mounted, are allowed to either ++the upper or the lower trees. ++ ++Changes to the underlying filesystems while part of a mounted overlay ++filesystem are not allowed. If the underlying filesystem is changed, ++the behavior of the overlay is undefined, though it will not result in ++a crash or deadlock. + +diff --git a/MAINTAINERS b/MAINTAINERS +index 768ceee..6701e5a 100644 +--- a/MAINTAINERS ++++ b/MAINTAINERS +@@ -4910,6 +4910,13 @@ F: drivers/scsi/osd/ + F: include/scsi/osd_* + F: fs/exofs/ + ++OVERLAYFS FILESYSTEM ++M: Miklos Szeredi ++L: linux-fsdevel@vger.kernel.org ++S: Supported ++F: fs/overlayfs/* ++F: Documentation/filesystems/overlayfs.txt ++ + P54 WIRELESS DRIVER + M: Christian Lamparter + L: linux-wireless@vger.kernel.org +diff --git a/fs/Kconfig b/fs/Kconfig +index ded2ffb..7f618e9 100644 +--- a/fs/Kconfig ++++ b/fs/Kconfig +@@ -63,6 +63,7 @@ source "fs/quota/Kconfig" + + source "fs/autofs4/Kconfig" + source "fs/fuse/Kconfig" ++source "fs/overlayfs/Kconfig" + + config CUSE + tristate "Character device in Userspace support" +diff --git a/fs/Makefile b/fs/Makefile +index 680ad8a..1727784 100644 +--- a/fs/Makefile ++++ b/fs/Makefile +@@ -104,6 +104,7 @@ obj-$(CONFIG_QNX4FS_FS) += qnx4/ + obj-$(CONFIG_AUTOFS4_FS) += autofs4/ + obj-$(CONFIG_ADFS_FS) += adfs/ + obj-$(CONFIG_FUSE_FS) += fuse/ ++obj-$(CONFIG_OVERLAYFS_FS) += overlayfs/ + obj-$(CONFIG_UDF_FS) += udf/ + obj-$(CONFIG_SUN_OPENPROMFS) += openpromfs/ + obj-$(CONFIG_OMFS_FS) += omfs/ +diff --git a/fs/namespace.c b/fs/namespace.c +index 99d2154..0719c07 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -1493,6 +1493,23 @@ void drop_collected_mounts(struct vfsmount *mnt) + release_mounts(&umount_list); + } + ++struct vfsmount *clone_private_mount(struct path *path) ++{ ++ struct vfsmount *mnt; ++ ++ if (IS_MNT_UNBINDABLE(path->mnt)) ++ return ERR_PTR(-EINVAL); ++ ++ down_read(&namespace_sem); ++ mnt = clone_mnt(path->mnt, path->dentry, CL_PRIVATE); ++ up_read(&namespace_sem); ++ if (!mnt) ++ return ERR_PTR(-ENOMEM); ++ ++ return mnt; ++} ++EXPORT_SYMBOL_GPL(clone_private_mount); ++ + int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, + struct vfsmount *root) + { +diff --git a/fs/open.c b/fs/open.c +index a57313e..1d4de26 100644 +--- a/fs/open.c ++++ b/fs/open.c +@@ -645,8 +645,7 @@ static inline int __get_file_write_access(struct inode *inode, + return error; + } + +-static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt, +- struct file *f, ++static struct file *__dentry_open(struct path *path, struct file *f, + int (*open)(struct inode *, struct file *), + const struct cred *cred) + { +@@ -654,15 +653,16 @@ static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt, + struct inode *inode; + int error; + ++ path_get(path); + f->f_mode = OPEN_FMODE(f->f_flags) | FMODE_LSEEK | + FMODE_PREAD | FMODE_PWRITE; + + if (unlikely(f->f_flags & O_PATH)) + f->f_mode = FMODE_PATH; + +- inode = dentry->d_inode; ++ inode = path->dentry->d_inode; + if (f->f_mode & FMODE_WRITE) { +- error = __get_file_write_access(inode, mnt); ++ error = __get_file_write_access(inode, path->mnt); + if (error) + goto cleanup_file; + if (!special_file(inode->i_mode)) +@@ -670,8 +670,7 @@ static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt, + } + + f->f_mapping = inode->i_mapping; +- f->f_path.dentry = dentry; +- f->f_path.mnt = mnt; ++ f->f_path = *path; + f->f_pos = 0; + file_sb_list_add(f, inode->i_sb); + +@@ -728,7 +727,7 @@ cleanup_all: + * here, so just reset the state. + */ + file_reset_write(f); +- mnt_drop_write(mnt); ++ mnt_drop_write(path->mnt); + } + } + file_sb_list_del(f); +@@ -736,8 +735,7 @@ cleanup_all: + f->f_path.mnt = NULL; + cleanup_file: + put_filp(f); +- dput(dentry); +- mntput(mnt); ++ path_put(path); + return ERR_PTR(error); + } + +@@ -763,14 +761,14 @@ cleanup_file: + struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, + int (*open)(struct inode *, struct file *)) + { ++ struct path path = { .dentry = dentry, .mnt = nd->path.mnt }; + const struct cred *cred = current_cred(); + + if (IS_ERR(nd->intent.open.file)) + goto out; + if (IS_ERR(dentry)) + goto out_err; +- nd->intent.open.file = __dentry_open(dget(dentry), mntget(nd->path.mnt), +- nd->intent.open.file, ++ nd->intent.open.file = __dentry_open(&path, nd->intent.open.file, + open, cred); + out: + return nd->intent.open.file; +@@ -799,10 +797,17 @@ struct file *nameidata_to_filp(struct nameidata *nd) + + /* Has the filesystem initialised the file for us? */ + if (filp->f_path.dentry == NULL) { +- path_get(&nd->path); +- filp = __dentry_open(nd->path.dentry, nd->path.mnt, filp, +- NULL, cred); ++ struct inode *inode = nd->path.dentry->d_inode; ++ ++ if (inode->i_op->open) { ++ int flags = filp->f_flags; ++ put_filp(filp); ++ filp = inode->i_op->open(nd->path.dentry, flags, cred); ++ } else { ++ filp = __dentry_open(&nd->path, filp, NULL, cred); ++ } + } ++ + return filp; + } + +@@ -813,26 +818,45 @@ struct file *nameidata_to_filp(struct nameidata *nd) + struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags, + const struct cred *cred) + { +- int error; +- struct file *f; +- +- validate_creds(cred); ++ struct path path = { .dentry = dentry, .mnt = mnt }; ++ struct file *ret; + + /* We must always pass in a valid mount pointer. */ + BUG_ON(!mnt); + +- error = -ENFILE; ++ ret = vfs_open(&path, flags, cred); ++ path_put(&path); ++ ++ return ret; ++} ++EXPORT_SYMBOL(dentry_open); ++ ++/** ++ * vfs_open - open the file at the given path ++ * @path: path to open ++ * @flags: open flags ++ * @cred: credentials to use ++ * ++ * Open the file. If successful, the returned file will have acquired ++ * an additional reference for path. ++ */ ++struct file *vfs_open(struct path *path, int flags, const struct cred *cred) ++{ ++ struct file *f; ++ struct inode *inode = path->dentry->d_inode; ++ ++ validate_creds(cred); ++ ++ if (inode->i_op->open) ++ return inode->i_op->open(path->dentry, flags, cred); + f = get_empty_filp(); +- if (f == NULL) { +- dput(dentry); +- mntput(mnt); +- return ERR_PTR(error); +- } ++ if (f == NULL) ++ return ERR_PTR(-ENFILE); + + f->f_flags = flags; +- return __dentry_open(dentry, mnt, f, NULL, cred); ++ return __dentry_open(path, f, NULL, cred); + } +-EXPORT_SYMBOL(dentry_open); ++EXPORT_SYMBOL(vfs_open); + + static void __put_unused_fd(struct files_struct *files, unsigned int fd) + { +diff --git a/fs/overlayfs/Kconfig b/fs/overlayfs/Kconfig +new file mode 100644 +index 0000000..c4517da +--- /dev/null ++++ b/fs/overlayfs/Kconfig +@@ -0,0 +1,4 @@ ++config OVERLAYFS_FS ++ tristate "Overlay filesystem support" ++ help ++ Add support for overlay filesystem. +diff --git a/fs/overlayfs/Makefile b/fs/overlayfs/Makefile +new file mode 100644 +index 0000000..8f91889 +--- /dev/null ++++ b/fs/overlayfs/Makefile +@@ -0,0 +1,7 @@ ++# ++# Makefile for the overlay filesystem. ++# ++ ++obj-$(CONFIG_OVERLAYFS_FS) += overlayfs.o ++ ++overlayfs-objs := super.o inode.o dir.o readdir.o copy_up.o +diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c +new file mode 100644 +index 0000000..308a80a +--- /dev/null ++++ b/fs/overlayfs/copy_up.c +@@ -0,0 +1,383 @@ ++/* ++ * ++ * Copyright (C) 2011 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "overlayfs.h" ++ ++#define OVL_COPY_UP_CHUNK_SIZE (1 << 20) ++ ++static int ovl_copy_up_xattr(struct dentry *old, struct dentry *new) ++{ ++ ssize_t list_size, size; ++ char *buf, *name, *value; ++ int error; ++ ++ if (!old->d_inode->i_op->getxattr || ++ !new->d_inode->i_op->getxattr) ++ return 0; ++ ++ list_size = vfs_listxattr(old, NULL, 0); ++ if (list_size <= 0) { ++ if (list_size == -EOPNOTSUPP) ++ return 0; ++ return list_size; ++ } ++ ++ buf = kzalloc(list_size, GFP_KERNEL); ++ if (!buf) ++ return -ENOMEM; ++ ++ error = -ENOMEM; ++ value = kmalloc(XATTR_SIZE_MAX, GFP_KERNEL); ++ if (!value) ++ goto out; ++ ++ list_size = vfs_listxattr(old, buf, list_size); ++ if (list_size <= 0) { ++ error = list_size; ++ goto out_free_value; ++ } ++ ++ for (name = buf; name < (buf + list_size); name += strlen(name) + 1) { ++ size = vfs_getxattr(old, name, value, XATTR_SIZE_MAX); ++ if (size <= 0) { ++ error = size; ++ goto out_free_value; ++ } ++ error = vfs_setxattr(new, name, value, size, 0); ++ if (error) ++ goto out_free_value; ++ } ++ ++out_free_value: ++ kfree(value); ++out: ++ kfree(buf); ++ return error; ++} ++ ++static int ovl_copy_up_data(struct path *old, struct path *new, loff_t len) ++{ ++ struct file *old_file; ++ struct file *new_file; ++ int error = 0; ++ ++ if (len == 0) ++ return 0; ++ ++ old_file = vfs_open(old, O_RDONLY, current_cred()); ++ if (IS_ERR(old_file)) ++ return PTR_ERR(old_file); ++ ++ new_file = vfs_open(new, O_WRONLY, current_cred()); ++ if (IS_ERR(new_file)) { ++ error = PTR_ERR(new_file); ++ goto out_fput; ++ } ++ ++ /* FIXME: copy up sparse files efficiently */ ++ while (len) { ++ loff_t offset = new_file->f_pos; ++ size_t this_len = OVL_COPY_UP_CHUNK_SIZE; ++ long bytes; ++ ++ if (len < this_len) ++ this_len = len; ++ ++ if (signal_pending_state(TASK_KILLABLE, current)) { ++ error = -EINTR; ++ break; ++ } ++ ++ bytes = do_splice_direct(old_file, &offset, new_file, this_len, ++ SPLICE_F_MOVE); ++ if (bytes <= 0) { ++ error = bytes; ++ break; ++ } ++ ++ len -= bytes; ++ } ++ ++ fput(new_file); ++out_fput: ++ fput(old_file); ++ return error; ++} ++ ++static char *ovl_read_symlink(struct dentry *realdentry) ++{ ++ int res; ++ char *buf; ++ struct inode *inode = realdentry->d_inode; ++ mm_segment_t old_fs; ++ ++ res = -EINVAL; ++ if (!inode->i_op->readlink) ++ goto err; ++ ++ res = -ENOMEM; ++ buf = (char *) __get_free_page(GFP_KERNEL); ++ if (!buf) ++ goto err; ++ ++ old_fs = get_fs(); ++ set_fs(get_ds()); ++ /* The cast to a user pointer is valid due to the set_fs() */ ++ res = inode->i_op->readlink(realdentry, ++ (char __user *)buf, PAGE_SIZE - 1); ++ set_fs(old_fs); ++ if (res < 0) { ++ free_page((unsigned long) buf); ++ goto err; ++ } ++ buf[res] = '\0'; ++ ++ return buf; ++ ++err: ++ return ERR_PTR(res); ++} ++ ++static int ovl_set_timestamps(struct dentry *upperdentry, struct kstat *stat) ++{ ++ struct iattr attr = { ++ .ia_valid = ATTR_ATIME | ATTR_MTIME | ATTR_ATIME_SET | ATTR_MTIME_SET, ++ .ia_atime = stat->atime, ++ .ia_mtime = stat->mtime, ++ }; ++ ++ return notify_change(upperdentry, &attr); ++} ++ ++static int ovl_set_mode(struct dentry *upperdentry, umode_t mode) ++{ ++ struct iattr attr = { ++ .ia_valid = ATTR_MODE, ++ .ia_mode = mode, ++ }; ++ ++ return notify_change(upperdentry, &attr); ++} ++ ++static int ovl_copy_up_locked(struct dentry *upperdir, struct dentry *dentry, ++ struct path *lowerpath, struct kstat *stat, ++ const char *link) ++{ ++ int err; ++ struct path newpath; ++ umode_t mode = stat->mode; ++ ++ /* Can't properly set mode on creation because of the umask */ ++ stat->mode &= S_IFMT; ++ ++ ovl_path_upper(dentry, &newpath); ++ WARN_ON(newpath.dentry); ++ newpath.dentry = ovl_upper_create(upperdir, dentry, stat, link); ++ if (IS_ERR(newpath.dentry)) ++ return PTR_ERR(newpath.dentry); ++ ++ if (S_ISREG(stat->mode)) { ++ err = ovl_copy_up_data(lowerpath, &newpath, stat->size); ++ if (err) ++ goto err_remove; ++ } ++ ++ err = ovl_copy_up_xattr(lowerpath->dentry, newpath.dentry); ++ if (err) ++ goto err_remove; ++ ++ mutex_lock(&newpath.dentry->d_inode->i_mutex); ++ if (!S_ISLNK(stat->mode)) ++ err = ovl_set_mode(newpath.dentry, mode); ++ if (!err) ++ err = ovl_set_timestamps(newpath.dentry, stat); ++ mutex_unlock(&newpath.dentry->d_inode->i_mutex); ++ if (err) ++ goto err_remove; ++ ++ ovl_dentry_update(dentry, newpath.dentry); ++ ++ /* ++ * Easiest way to get rid of the lower dentry reference is to ++ * drop this dentry. This is neither needed nor possible for ++ * directories. ++ */ ++ if (!S_ISDIR(stat->mode)) ++ d_drop(dentry); ++ ++ return 0; ++ ++err_remove: ++ if (S_ISDIR(stat->mode)) ++ vfs_rmdir(upperdir->d_inode, newpath.dentry); ++ else ++ vfs_unlink(upperdir->d_inode, newpath.dentry); ++ ++ dput(newpath.dentry); ++ ++ return err; ++} ++ ++/* ++ * Copy up a single dentry ++ * ++ * Directory renames only allowed on "pure upper" (already created on ++ * upper filesystem, never copied up). Directories which are on lower or ++ * are merged may not be renamed. For these -EXDEV is returned and ++ * userspace has to deal with it. This means, when copying up a ++ * directory we can rely on it and ancestors being stable. ++ * ++ * Non-directory renames start with copy up of source if necessary. The ++ * actual rename will only proceed once the copy up was successful. Copy ++ * up uses upper parent i_mutex for exclusion. Since rename can change ++ * d_parent it is possible that the copy up will lock the old parent. At ++ * that point the file will have already been copied up anyway. ++ */ ++static int ovl_copy_up_one(struct dentry *parent, struct dentry *dentry, ++ struct path *lowerpath, struct kstat *stat) ++{ ++ int err; ++ struct kstat pstat; ++ struct path parentpath; ++ struct dentry *upperdir; ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ char *link = NULL; ++ ++ ovl_path_upper(parent, &parentpath); ++ upperdir = parentpath.dentry; ++ ++ err = vfs_getattr(parentpath.mnt, parentpath.dentry, &pstat); ++ if (err) ++ return err; ++ ++ if (S_ISLNK(stat->mode)) { ++ link = ovl_read_symlink(lowerpath->dentry); ++ if (IS_ERR(link)) ++ return PTR_ERR(link); ++ } ++ ++ err = -ENOMEM; ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ goto out_free_link; ++ ++ override_cred->fsuid = stat->uid; ++ override_cred->fsgid = stat->gid; ++ /* ++ * CAP_SYS_ADMIN for copying up extended attributes ++ * CAP_DAC_OVERRIDE for create ++ * CAP_FOWNER for chmod, timestamp update ++ * CAP_FSETID for chmod ++ * CAP_MKNOD for mknod ++ */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); ++ cap_raise(override_cred->cap_effective, CAP_FOWNER); ++ cap_raise(override_cred->cap_effective, CAP_FSETID); ++ cap_raise(override_cred->cap_effective, CAP_MKNOD); ++ old_cred = override_creds(override_cred); ++ ++ mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); ++ if (ovl_path_type(dentry) != OVL_PATH_LOWER) { ++ err = 0; ++ } else { ++ err = ovl_copy_up_locked(upperdir, dentry, lowerpath, ++ stat, link); ++ if (!err) { ++ /* Restore timestamps on parent (best effort) */ ++ ovl_set_timestamps(upperdir, &pstat); ++ } ++ } ++ ++ mutex_unlock(&upperdir->d_inode->i_mutex); ++ ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ ++out_free_link: ++ if (link) ++ free_page((unsigned long) link); ++ ++ return err; ++} ++ ++int ovl_copy_up(struct dentry *dentry) ++{ ++ int err; ++ ++ err = 0; ++ while (!err) { ++ struct dentry *next; ++ struct dentry *parent; ++ struct path lowerpath; ++ struct kstat stat; ++ enum ovl_path_type type = ovl_path_type(dentry); ++ ++ if (type != OVL_PATH_LOWER) ++ break; ++ ++ next = dget(dentry); ++ /* find the topmost dentry not yet copied up */ ++ for (;;) { ++ parent = dget_parent(next); ++ ++ type = ovl_path_type(parent); ++ if (type != OVL_PATH_LOWER) ++ break; ++ ++ dput(next); ++ next = parent; ++ } ++ ++ ovl_path_lower(next, &lowerpath); ++ err = vfs_getattr(lowerpath.mnt, lowerpath.dentry, &stat); ++ if (!err) ++ err = ovl_copy_up_one(parent, next, &lowerpath, &stat); ++ ++ dput(parent); ++ dput(next); ++ } ++ ++ return err; ++} ++ ++/* Optimize by not copying up the file first and truncating later */ ++int ovl_copy_up_truncate(struct dentry *dentry, loff_t size) ++{ ++ int err; ++ struct kstat stat; ++ struct path lowerpath; ++ struct dentry *parent = dget_parent(dentry); ++ ++ err = ovl_copy_up(parent); ++ if (err) ++ goto out_dput_parent; ++ ++ ovl_path_lower(dentry, &lowerpath); ++ err = vfs_getattr(lowerpath.mnt, lowerpath.dentry, &stat); ++ if (err) ++ goto out_dput_parent; ++ ++ if (size < stat.size) ++ stat.size = size; ++ ++ err = ovl_copy_up_one(parent, dentry, &lowerpath, &stat); ++ ++out_dput_parent: ++ dput(parent); ++ return err; ++} +diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c +new file mode 100644 +index 0000000..834bed8 +--- /dev/null ++++ b/fs/overlayfs/dir.c +@@ -0,0 +1,596 @@ ++/* ++ * ++ * Copyright (C) 2011 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include "overlayfs.h" ++ ++static const char *ovl_whiteout_symlink = "(overlay-whiteout)"; ++ ++static int ovl_whiteout(struct dentry *upperdir, struct dentry *dentry) ++{ ++ int err; ++ struct dentry *newdentry; ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ ++ /* FIXME: recheck lower dentry to see if whiteout is really needed */ ++ ++ err = -ENOMEM; ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ goto out; ++ ++ /* ++ * CAP_SYS_ADMIN for setxattr ++ * CAP_DAC_OVERRIDE for symlink creation ++ * CAP_FOWNER for unlink in sticky directory ++ */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); ++ cap_raise(override_cred->cap_effective, CAP_FOWNER); ++ override_cred->fsuid = 0; ++ override_cred->fsgid = 0; ++ old_cred = override_creds(override_cred); ++ ++ newdentry = lookup_one_len(dentry->d_name.name, upperdir, ++ dentry->d_name.len); ++ err = PTR_ERR(newdentry); ++ if (IS_ERR(newdentry)) ++ goto out_put_cred; ++ ++ /* Just been removed within the same locked region */ ++ WARN_ON(newdentry->d_inode); ++ ++ err = vfs_symlink(upperdir->d_inode, newdentry, ovl_whiteout_symlink); ++ if (err) ++ goto out_dput; ++ ++ ovl_dentry_version_inc(dentry->d_parent); ++ ++ err = vfs_setxattr(newdentry, ovl_whiteout_xattr, "y", 1, 0); ++ if (err) ++ vfs_unlink(upperdir->d_inode, newdentry); ++ ++out_dput: ++ dput(newdentry); ++out_put_cred: ++ revert_creds(old_cred); ++ put_cred(override_cred); ++out: ++ if (err) { ++ /* ++ * There's no way to recover from failure to whiteout. ++ * What should we do? Log a big fat error and... ? ++ */ ++ printk(KERN_ERR "overlayfs: ERROR - failed to whiteout '%s'\n", ++ dentry->d_name.name); ++ } ++ ++ return err; ++} ++ ++static struct dentry *ovl_lookup_create(struct dentry *upperdir, ++ struct dentry *template) ++{ ++ int err; ++ struct dentry *newdentry; ++ struct qstr *name = &template->d_name; ++ ++ newdentry = lookup_one_len(name->name, upperdir, name->len); ++ if (IS_ERR(newdentry)) ++ return newdentry; ++ ++ if (newdentry->d_inode) { ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ ++ /* No need to check whiteout if lower parent is non-existent */ ++ err = -EEXIST; ++ if (!ovl_dentry_lower(template->d_parent)) ++ goto out_dput; ++ ++ if (!S_ISLNK(newdentry->d_inode->i_mode)) ++ goto out_dput; ++ ++ err = -ENOMEM; ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ goto out_dput; ++ ++ /* ++ * CAP_SYS_ADMIN for getxattr ++ * CAP_FOWNER for unlink in sticky directory ++ */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ cap_raise(override_cred->cap_effective, CAP_FOWNER); ++ old_cred = override_creds(override_cred); ++ ++ err = -EEXIST; ++ if (ovl_is_whiteout(newdentry)) ++ err = vfs_unlink(upperdir->d_inode, newdentry); ++ ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ if (err) ++ goto out_dput; ++ ++ dput(newdentry); ++ newdentry = lookup_one_len(name->name, upperdir, name->len); ++ if (IS_ERR(newdentry)) { ++ ovl_whiteout(upperdir, template); ++ return newdentry; ++ } ++ ++ /* ++ * Whiteout just been successfully removed, parent ++ * i_mutex is still held, there's no way the lookup ++ * could return positive. ++ */ ++ WARN_ON(newdentry->d_inode); ++ } ++ ++ return newdentry; ++ ++out_dput: ++ dput(newdentry); ++ return ERR_PTR(err); ++} ++ ++struct dentry *ovl_upper_create(struct dentry *upperdir, struct dentry *dentry, ++ struct kstat *stat, const char *link) ++{ ++ int err; ++ struct dentry *newdentry; ++ struct inode *dir = upperdir->d_inode; ++ ++ newdentry = ovl_lookup_create(upperdir, dentry); ++ if (IS_ERR(newdentry)) ++ goto out; ++ ++ switch (stat->mode & S_IFMT) { ++ case S_IFREG: ++ err = vfs_create(dir, newdentry, stat->mode, NULL); ++ break; ++ ++ case S_IFDIR: ++ err = vfs_mkdir(dir, newdentry, stat->mode); ++ break; ++ ++ case S_IFCHR: ++ case S_IFBLK: ++ case S_IFIFO: ++ case S_IFSOCK: ++ err = vfs_mknod(dir, newdentry, stat->mode, stat->rdev); ++ break; ++ ++ case S_IFLNK: ++ err = vfs_symlink(dir, newdentry, link); ++ break; ++ ++ default: ++ err = -EPERM; ++ } ++ if (err) { ++ if (ovl_dentry_is_opaque(dentry)) ++ ovl_whiteout(upperdir, dentry); ++ dput(newdentry); ++ newdentry = ERR_PTR(err); ++ } else if (WARN_ON(!newdentry->d_inode)) { ++ /* ++ * Not quite sure if non-instantiated dentry is legal or not. ++ * VFS doesn't seem to care so check and warn here. ++ */ ++ dput(newdentry); ++ newdentry = ERR_PTR(-ENOENT); ++ } ++ ++out: ++ return newdentry; ++ ++} ++ ++static int ovl_set_opaque(struct dentry *upperdentry) ++{ ++ int err; ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ return -ENOMEM; ++ ++ /* CAP_SYS_ADMIN for setxattr of "trusted" namespace */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ old_cred = override_creds(override_cred); ++ err = vfs_setxattr(upperdentry, ovl_opaque_xattr, "y", 1, 0); ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ ++ return err; ++} ++ ++static int ovl_remove_opaque(struct dentry *upperdentry) ++{ ++ int err; ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ return -ENOMEM; ++ ++ /* CAP_SYS_ADMIN for removexattr of "trusted" namespace */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ old_cred = override_creds(override_cred); ++ err = vfs_removexattr(upperdentry, ovl_opaque_xattr); ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ ++ return err; ++} ++ ++static int ovl_dir_getattr(struct vfsmount *mnt, struct dentry *dentry, ++ struct kstat *stat) ++{ ++ int err; ++ enum ovl_path_type type; ++ struct path realpath; ++ ++ type = ovl_path_real(dentry, &realpath); ++ err = vfs_getattr(realpath.mnt, realpath.dentry, stat); ++ if (err) ++ return err; ++ ++ stat->dev = dentry->d_sb->s_dev; ++ stat->ino = dentry->d_inode->i_ino; ++ ++ /* ++ * It's probably not worth it to count subdirs to get the ++ * correct link count. nlink=1 seems to pacify 'find' and ++ * other utilities. ++ */ ++ if (type == OVL_PATH_MERGE) ++ stat->nlink = 1; ++ ++ return 0; ++} ++ ++static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev, ++ const char *link) ++{ ++ int err; ++ struct dentry *newdentry; ++ struct dentry *upperdir; ++ struct inode *inode; ++ struct kstat stat = { ++ .mode = mode, ++ .rdev = rdev, ++ }; ++ ++ err = -ENOMEM; ++ inode = ovl_new_inode(dentry->d_sb, mode, dentry->d_fsdata); ++ if (!inode) ++ goto out; ++ ++ err = ovl_copy_up(dentry->d_parent); ++ if (err) ++ goto out_iput; ++ ++ upperdir = ovl_dentry_upper(dentry->d_parent); ++ mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); ++ ++ newdentry = ovl_upper_create(upperdir, dentry, &stat, link); ++ err = PTR_ERR(newdentry); ++ if (IS_ERR(newdentry)) ++ goto out_unlock; ++ ++ ovl_dentry_version_inc(dentry->d_parent); ++ if (ovl_dentry_is_opaque(dentry) && S_ISDIR(mode)) { ++ err = ovl_set_opaque(newdentry); ++ if (err) { ++ vfs_rmdir(upperdir->d_inode, newdentry); ++ ovl_whiteout(upperdir, dentry); ++ goto out_dput; ++ } ++ } ++ ovl_dentry_update(dentry, newdentry); ++ d_instantiate(dentry, inode); ++ inode = NULL; ++ newdentry = NULL; ++ err = 0; ++ ++out_dput: ++ dput(newdentry); ++out_unlock: ++ mutex_unlock(&upperdir->d_inode->i_mutex); ++out_iput: ++ iput(inode); ++out: ++ return err; ++} ++ ++static int ovl_create(struct inode *dir, struct dentry *dentry, int mode, ++ struct nameidata *nd) ++{ ++ return ovl_create_object(dentry, (mode & 07777) | S_IFREG, 0, NULL); ++} ++ ++static int ovl_mkdir(struct inode *dir, struct dentry *dentry, int mode) ++{ ++ return ovl_create_object(dentry, (mode & 07777) | S_IFDIR, 0, NULL); ++} ++ ++static int ovl_mknod(struct inode *dir, struct dentry *dentry, int mode, ++ dev_t rdev) ++{ ++ return ovl_create_object(dentry, mode, rdev, NULL); ++} ++ ++static int ovl_symlink(struct inode *dir, struct dentry *dentry, ++ const char *link) ++{ ++ return ovl_create_object(dentry, S_IFLNK, 0, link); ++} ++ ++static int ovl_do_remove(struct dentry *dentry, bool is_dir) ++{ ++ int err; ++ enum ovl_path_type type; ++ struct path realpath; ++ struct dentry *upperdir; ++ ++ err = ovl_copy_up(dentry->d_parent); ++ if (err) ++ return err; ++ ++ upperdir = ovl_dentry_upper(dentry->d_parent); ++ mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); ++ type = ovl_path_real(dentry, &realpath); ++ if (type != OVL_PATH_LOWER) { ++ err = -ESTALE; ++ if (realpath.dentry->d_parent != upperdir) ++ goto out_d_drop; ++ ++ /* FIXME: create whiteout up front and rename to target */ ++ ++ if (is_dir) ++ err = vfs_rmdir(upperdir->d_inode, realpath.dentry); ++ else ++ err = vfs_unlink(upperdir->d_inode, realpath.dentry); ++ if (err) ++ goto out_d_drop; ++ ++ ovl_dentry_version_inc(dentry->d_parent); ++ } ++ ++ if (type != OVL_PATH_UPPER || ovl_dentry_is_opaque(dentry)) ++ err = ovl_whiteout(upperdir, dentry); ++ ++ /* ++ * Keeping this dentry hashed would mean having to release ++ * upperpath/lowerpath, which could only be done if we are the ++ * sole user of this dentry. Too tricky... Just unhash for ++ * now. ++ */ ++out_d_drop: ++ d_drop(dentry); ++ mutex_unlock(&upperdir->d_inode->i_mutex); ++ ++ return err; ++} ++ ++static int ovl_unlink(struct inode *dir, struct dentry *dentry) ++{ ++ return ovl_do_remove(dentry, false); ++} ++ ++ ++static int ovl_rmdir(struct inode *dir, struct dentry *dentry) ++{ ++ int err; ++ enum ovl_path_type type; ++ ++ type = ovl_path_type(dentry); ++ if (type != OVL_PATH_UPPER) { ++ err = ovl_check_empty_and_clear(dentry, type); ++ if (err) ++ return err; ++ } ++ ++ return ovl_do_remove(dentry, true); ++} ++ ++static int ovl_link(struct dentry *old, struct inode *newdir, ++ struct dentry *new) ++{ ++ int err; ++ struct dentry *olddentry; ++ struct dentry *newdentry; ++ struct dentry *upperdir; ++ ++ err = ovl_copy_up(old); ++ if (err) ++ goto out; ++ ++ err = ovl_copy_up(new->d_parent); ++ if (err) ++ goto out; ++ ++ upperdir = ovl_dentry_upper(new->d_parent); ++ mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); ++ newdentry = ovl_lookup_create(upperdir, new); ++ err = PTR_ERR(newdentry); ++ if (IS_ERR(newdentry)) ++ goto out_unlock; ++ ++ olddentry = ovl_dentry_upper(old); ++ err = vfs_link(olddentry, upperdir->d_inode, newdentry); ++ if (!err) { ++ if (WARN_ON(!newdentry->d_inode)) { ++ dput(newdentry); ++ err = -ENOENT; ++ goto out_unlock; ++ } ++ ++ ovl_dentry_version_inc(new->d_parent); ++ ovl_dentry_update(new, newdentry); ++ ++ ihold(old->d_inode); ++ d_instantiate(new, old->d_inode); ++ } else { ++ if (ovl_dentry_is_opaque(new)) ++ ovl_whiteout(upperdir, new); ++ dput(newdentry); ++ } ++out_unlock: ++ mutex_unlock(&upperdir->d_inode->i_mutex); ++out: ++ return err; ++ ++} ++ ++static int ovl_rename(struct inode *olddir, struct dentry *old, ++ struct inode *newdir, struct dentry *new) ++{ ++ int err; ++ enum ovl_path_type old_type; ++ enum ovl_path_type new_type; ++ struct dentry *old_upperdir; ++ struct dentry *new_upperdir; ++ struct dentry *olddentry; ++ struct dentry *newdentry; ++ struct dentry *trap; ++ bool old_opaque; ++ bool new_opaque; ++ bool new_create = false; ++ bool is_dir = S_ISDIR(old->d_inode->i_mode); ++ ++ /* Don't copy up directory trees */ ++ old_type = ovl_path_type(old); ++ if (old_type != OVL_PATH_UPPER && is_dir) ++ return -EXDEV; ++ ++ if (new->d_inode) { ++ new_type = ovl_path_type(new); ++ ++ if (new_type == OVL_PATH_LOWER && old_type == OVL_PATH_LOWER) { ++ if (ovl_dentry_lower(old)->d_inode == ++ ovl_dentry_lower(new)->d_inode) ++ return 0; ++ } ++ if (new_type != OVL_PATH_LOWER && old_type != OVL_PATH_LOWER) { ++ if (ovl_dentry_upper(old)->d_inode == ++ ovl_dentry_upper(new)->d_inode) ++ return 0; ++ } ++ ++ if (new_type != OVL_PATH_UPPER && ++ S_ISDIR(new->d_inode->i_mode)) { ++ err = ovl_check_empty_and_clear(new, new_type); ++ if (err) ++ return err; ++ } ++ } else { ++ new_type = OVL_PATH_UPPER; ++ } ++ ++ err = ovl_copy_up(old); ++ if (err) ++ return err; ++ ++ err = ovl_copy_up(new->d_parent); ++ if (err) ++ return err; ++ ++ old_upperdir = ovl_dentry_upper(old->d_parent); ++ new_upperdir = ovl_dentry_upper(new->d_parent); ++ ++ trap = lock_rename(new_upperdir, old_upperdir); ++ ++ olddentry = ovl_dentry_upper(old); ++ newdentry = ovl_dentry_upper(new); ++ if (newdentry) { ++ dget(newdentry); ++ } else { ++ new_create = true; ++ newdentry = ovl_lookup_create(new_upperdir, new); ++ err = PTR_ERR(newdentry); ++ if (IS_ERR(newdentry)) ++ goto out_unlock; ++ } ++ ++ err = -ESTALE; ++ if (olddentry->d_parent != old_upperdir) ++ goto out_dput; ++ if (newdentry->d_parent != new_upperdir) ++ goto out_dput; ++ if (olddentry == trap) ++ goto out_dput; ++ if (newdentry == trap) ++ goto out_dput; ++ ++ old_opaque = ovl_dentry_is_opaque(old); ++ new_opaque = ovl_dentry_is_opaque(new) || new_type != OVL_PATH_UPPER; ++ ++ if (is_dir && !old_opaque && new_opaque) { ++ err = ovl_set_opaque(olddentry); ++ if (err) ++ goto out_dput; ++ } ++ ++ err = vfs_rename(old_upperdir->d_inode, olddentry, ++ new_upperdir->d_inode, newdentry); ++ ++ if (err) { ++ if (new_create && ovl_dentry_is_opaque(new)) ++ ovl_whiteout(new_upperdir, new); ++ if (is_dir && !old_opaque && new_opaque) ++ ovl_remove_opaque(olddentry); ++ goto out_dput; ++ } ++ ++ if (old_type != OVL_PATH_UPPER || old_opaque) ++ err = ovl_whiteout(old_upperdir, old); ++ if (is_dir && old_opaque && !new_opaque) ++ ovl_remove_opaque(olddentry); ++ ++ if (old_opaque != new_opaque) ++ ovl_dentry_set_opaque(old, new_opaque); ++ ++ ovl_dentry_version_inc(old->d_parent); ++ ovl_dentry_version_inc(new->d_parent); ++ ++out_dput: ++ dput(newdentry); ++out_unlock: ++ unlock_rename(new_upperdir, old_upperdir); ++ return err; ++} ++ ++const struct inode_operations ovl_dir_inode_operations = { ++ .lookup = ovl_lookup, ++ .mkdir = ovl_mkdir, ++ .symlink = ovl_symlink, ++ .unlink = ovl_unlink, ++ .rmdir = ovl_rmdir, ++ .rename = ovl_rename, ++ .link = ovl_link, ++ .setattr = ovl_setattr, ++ .create = ovl_create, ++ .mknod = ovl_mknod, ++ .permission = ovl_permission, ++ .getattr = ovl_dir_getattr, ++ .setxattr = ovl_setxattr, ++ .getxattr = ovl_getxattr, ++ .listxattr = ovl_listxattr, ++ .removexattr = ovl_removexattr, ++}; +diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c +new file mode 100644 +index 0000000..40b79d0 +--- /dev/null ++++ b/fs/overlayfs/inode.c +@@ -0,0 +1,383 @@ ++/* ++ * ++ * Copyright (C) 2011 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include "overlayfs.h" ++ ++int ovl_setattr(struct dentry *dentry, struct iattr *attr) ++{ ++ struct dentry *upperdentry; ++ int err; ++ ++ if ((attr->ia_valid & ATTR_SIZE) && !ovl_dentry_upper(dentry)) ++ err = ovl_copy_up_truncate(dentry, attr->ia_size); ++ else ++ err = ovl_copy_up(dentry); ++ if (err) ++ return err; ++ ++ upperdentry = ovl_dentry_upper(dentry); ++ ++ if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) ++ attr->ia_valid &= ~ATTR_MODE; ++ ++ mutex_lock(&upperdentry->d_inode->i_mutex); ++ err = notify_change(upperdentry, attr); ++ mutex_unlock(&upperdentry->d_inode->i_mutex); ++ ++ return err; ++} ++ ++static int ovl_getattr(struct vfsmount *mnt, struct dentry *dentry, ++ struct kstat *stat) ++{ ++ struct path realpath; ++ ++ ovl_path_real(dentry, &realpath); ++ return vfs_getattr(realpath.mnt, realpath.dentry, stat); ++} ++ ++int ovl_permission(struct inode *inode, int mask) ++{ ++ struct ovl_entry *oe; ++ struct dentry *alias = NULL; ++ struct inode *realinode; ++ struct dentry *realdentry; ++ bool is_upper; ++ int err; ++ ++ if (S_ISDIR(inode->i_mode)) { ++ oe = inode->i_private; ++ } else if (mask & MAY_NOT_BLOCK) { ++ return -ECHILD; ++ } else { ++ /* ++ * For non-directories find an alias and get the info ++ * from there. ++ */ ++ spin_lock(&inode->i_lock); ++ if (WARN_ON(list_empty(&inode->i_dentry))) { ++ spin_unlock(&inode->i_lock); ++ return -ENOENT; ++ } ++ alias = list_entry(inode->i_dentry.next, struct dentry, d_alias); ++ dget(alias); ++ spin_unlock(&inode->i_lock); ++ oe = alias->d_fsdata; ++ } ++ ++ realdentry = ovl_entry_real(oe, &is_upper); ++ ++ /* Careful in RCU walk mode */ ++ realinode = ACCESS_ONCE(realdentry->d_inode); ++ if (!realinode) { ++ WARN_ON(!(mask & MAY_NOT_BLOCK)); ++ err = -ENOENT; ++ goto out_dput; ++ } ++ ++ if (mask & MAY_WRITE) { ++ umode_t mode = realinode->i_mode; ++ ++ /* ++ * Writes will always be redirected to upper layer, so ++ * ignore lower layer being read-only. ++ * ++ * If the overlay itself is read-only then proceed ++ * with the permission check, don't return EROFS. ++ * This will only happen if this is the lower layer of ++ * another overlayfs. ++ * ++ * If upper fs becomes read-only after the overlay was ++ * constructed return EROFS to prevent modification of ++ * upper layer. ++ */ ++ err = -EROFS; ++ if (is_upper && !IS_RDONLY(inode) && IS_RDONLY(realinode) && ++ (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) ++ goto out_dput; ++ ++ /* ++ * Nobody gets write access to an immutable file. ++ */ ++ err = -EACCES; ++ if (IS_IMMUTABLE(realinode)) ++ goto out_dput; ++ } ++ ++ if (realinode->i_op->permission) ++ err = realinode->i_op->permission(realinode, mask); ++ else ++ err = generic_permission(realinode, mask); ++out_dput: ++ dput(alias); ++ return err; ++} ++ ++ ++struct ovl_link_data { ++ struct dentry *realdentry; ++ void *cookie; ++}; ++ ++static void *ovl_follow_link(struct dentry *dentry, struct nameidata *nd) ++{ ++ void *ret; ++ struct dentry *realdentry; ++ struct inode *realinode; ++ ++ realdentry = ovl_dentry_real(dentry); ++ realinode = realdentry->d_inode; ++ ++ if (WARN_ON(!realinode->i_op->follow_link)) ++ return ERR_PTR(-EPERM); ++ ++ ret = realinode->i_op->follow_link(realdentry, nd); ++ if (IS_ERR(ret)) ++ return ret; ++ ++ if (realinode->i_op->put_link) { ++ struct ovl_link_data *data; ++ ++ data = kmalloc(sizeof(struct ovl_link_data), GFP_KERNEL); ++ if (!data) { ++ realinode->i_op->put_link(realdentry, nd, ret); ++ return ERR_PTR(-ENOMEM); ++ } ++ data->realdentry = realdentry; ++ data->cookie = ret; ++ ++ return data; ++ } else { ++ return NULL; ++ } ++} ++ ++static void ovl_put_link(struct dentry *dentry, struct nameidata *nd, void *c) ++{ ++ struct inode *realinode; ++ struct ovl_link_data *data = c; ++ ++ if (!data) ++ return; ++ ++ realinode = data->realdentry->d_inode; ++ realinode->i_op->put_link(data->realdentry, nd, data->cookie); ++ kfree(data); ++} ++ ++static int ovl_readlink(struct dentry *dentry, char __user *buf, int bufsiz) ++{ ++ struct path realpath; ++ struct inode *realinode; ++ ++ ovl_path_real(dentry, &realpath); ++ realinode = realpath.dentry->d_inode; ++ ++ if (!realinode->i_op->readlink) ++ return -EINVAL; ++ ++ touch_atime(realpath.mnt, realpath.dentry); ++ ++ return realinode->i_op->readlink(realpath.dentry, buf, bufsiz); ++} ++ ++ ++static bool ovl_is_private_xattr(const char *name) ++{ ++ return strncmp(name, "trusted.overlay.", 14) == 0; ++} ++ ++int ovl_setxattr(struct dentry *dentry, const char *name, ++ const void *value, size_t size, int flags) ++{ ++ int err; ++ struct dentry *upperdentry; ++ ++ if (ovl_is_private_xattr(name)) ++ return -EPERM; ++ ++ err = ovl_copy_up(dentry); ++ if (err) ++ return err; ++ ++ upperdentry = ovl_dentry_upper(dentry); ++ return vfs_setxattr(upperdentry, name, value, size, flags); ++} ++ ++ssize_t ovl_getxattr(struct dentry *dentry, const char *name, ++ void *value, size_t size) ++{ ++ if (ovl_path_type(dentry->d_parent) == OVL_PATH_MERGE && ++ ovl_is_private_xattr(name)) ++ return -ENODATA; ++ ++ return vfs_getxattr(ovl_dentry_real(dentry), name, value, size); ++} ++ ++ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size) ++{ ++ ssize_t res; ++ int off; ++ ++ res = vfs_listxattr(ovl_dentry_real(dentry), list, size); ++ if (res <= 0 || size == 0) ++ return res; ++ ++ if (ovl_path_type(dentry->d_parent) != OVL_PATH_MERGE) ++ return res; ++ ++ /* filter out private xattrs */ ++ for (off = 0; off < res;) { ++ char *s = list + off; ++ size_t slen = strlen(s) + 1; ++ ++ BUG_ON(off + slen > res); ++ ++ if (ovl_is_private_xattr(s)) { ++ res -= slen; ++ memmove(s, s + slen, res - off); ++ } else { ++ off += slen; ++ } ++ } ++ ++ return res; ++} ++ ++int ovl_removexattr(struct dentry *dentry, const char *name) ++{ ++ int err; ++ struct path realpath; ++ enum ovl_path_type type; ++ ++ if (ovl_path_type(dentry->d_parent) == OVL_PATH_MERGE && ++ ovl_is_private_xattr(name)) ++ return -ENODATA; ++ ++ type = ovl_path_real(dentry, &realpath); ++ if (type == OVL_PATH_LOWER) { ++ err = vfs_getxattr(realpath.dentry, name, NULL, 0); ++ if (err < 0) ++ return err; ++ ++ err = ovl_copy_up(dentry); ++ if (err) ++ return err; ++ ++ ovl_path_upper(dentry, &realpath); ++ } ++ ++ return vfs_removexattr(realpath.dentry, name); ++} ++ ++static bool ovl_open_need_copy_up(int flags, enum ovl_path_type type, ++ struct dentry *realdentry) ++{ ++ if (type != OVL_PATH_LOWER) ++ return false; ++ ++ if (special_file(realdentry->d_inode->i_mode)) ++ return false; ++ ++ if (!(OPEN_FMODE(flags) & FMODE_WRITE) && !(flags & O_TRUNC)) ++ return false; ++ ++ return true; ++} ++ ++static struct file *ovl_open(struct dentry *dentry, int flags, ++ const struct cred *cred) ++{ ++ int err; ++ struct path realpath; ++ enum ovl_path_type type; ++ ++ type = ovl_path_real(dentry, &realpath); ++ if (ovl_open_need_copy_up(flags, type, realpath.dentry)) { ++ if (flags & O_TRUNC) ++ err = ovl_copy_up_truncate(dentry, 0); ++ else ++ err = ovl_copy_up(dentry); ++ if (err) ++ return ERR_PTR(err); ++ ++ ovl_path_upper(dentry, &realpath); ++ } ++ ++ return vfs_open(&realpath, flags, cred); ++} ++ ++static const struct inode_operations ovl_file_inode_operations = { ++ .setattr = ovl_setattr, ++ .permission = ovl_permission, ++ .getattr = ovl_getattr, ++ .setxattr = ovl_setxattr, ++ .getxattr = ovl_getxattr, ++ .listxattr = ovl_listxattr, ++ .removexattr = ovl_removexattr, ++ .open = ovl_open, ++}; ++ ++static const struct inode_operations ovl_symlink_inode_operations = { ++ .setattr = ovl_setattr, ++ .follow_link = ovl_follow_link, ++ .put_link = ovl_put_link, ++ .readlink = ovl_readlink, ++ .getattr = ovl_getattr, ++ .setxattr = ovl_setxattr, ++ .getxattr = ovl_getxattr, ++ .listxattr = ovl_listxattr, ++ .removexattr = ovl_removexattr, ++}; ++ ++struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, ++ struct ovl_entry *oe) ++{ ++ struct inode *inode; ++ ++ inode = new_inode(sb); ++ if (!inode) ++ return NULL; ++ ++ mode &= S_IFMT; ++ ++ inode->i_ino = get_next_ino(); ++ inode->i_mode = mode; ++ inode->i_flags |= S_NOATIME | S_NOCMTIME; ++ ++ switch (mode) { ++ case S_IFDIR: ++ inode->i_private = oe; ++ inode->i_op = &ovl_dir_inode_operations; ++ inode->i_fop = &ovl_dir_operations; ++ break; ++ ++ case S_IFLNK: ++ inode->i_op = &ovl_symlink_inode_operations; ++ break; ++ ++ case S_IFREG: ++ case S_IFSOCK: ++ case S_IFBLK: ++ case S_IFCHR: ++ case S_IFIFO: ++ inode->i_op = &ovl_file_inode_operations; ++ break; ++ ++ default: ++ WARN(1, "illegal file type: %i\n", mode); ++ inode = NULL; ++ } ++ ++ return inode; ++ ++} +diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h +new file mode 100644 +index 0000000..07a1fe9 +--- /dev/null ++++ b/fs/overlayfs/overlayfs.h +@@ -0,0 +1,63 @@ ++/* ++ * ++ * Copyright (C) 2011 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++struct ovl_entry; ++ ++enum ovl_path_type { ++ OVL_PATH_UPPER, ++ OVL_PATH_MERGE, ++ OVL_PATH_LOWER, ++}; ++ ++extern const char *ovl_opaque_xattr; ++extern const char *ovl_whiteout_xattr; ++extern const struct dentry_operations ovl_dentry_operations; ++ ++enum ovl_path_type ovl_path_type(struct dentry *dentry); ++u64 ovl_dentry_version_get(struct dentry *dentry); ++void ovl_dentry_version_inc(struct dentry *dentry); ++void ovl_path_upper(struct dentry *dentry, struct path *path); ++void ovl_path_lower(struct dentry *dentry, struct path *path); ++enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path); ++struct dentry *ovl_dentry_upper(struct dentry *dentry); ++struct dentry *ovl_dentry_lower(struct dentry *dentry); ++struct dentry *ovl_dentry_real(struct dentry *dentry); ++struct dentry *ovl_entry_real(struct ovl_entry *oe, bool *is_upper); ++bool ovl_dentry_is_opaque(struct dentry *dentry); ++void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque); ++bool ovl_is_whiteout(struct dentry *dentry); ++void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry); ++struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, ++ struct nameidata *nd); ++ ++struct dentry *ovl_upper_create(struct dentry *upperdir, struct dentry *dentry, ++ struct kstat *stat, const char *link); ++ ++/* readdir.c */ ++extern const struct file_operations ovl_dir_operations; ++int ovl_check_empty_and_clear(struct dentry *dentry, enum ovl_path_type type); ++ ++/* inode.c */ ++int ovl_setattr(struct dentry *dentry, struct iattr *attr); ++int ovl_permission(struct inode *inode, int mask); ++int ovl_setxattr(struct dentry *dentry, const char *name, ++ const void *value, size_t size, int flags); ++ssize_t ovl_getxattr(struct dentry *dentry, const char *name, ++ void *value, size_t size); ++ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size); ++int ovl_removexattr(struct dentry *dentry, const char *name); ++ ++struct inode *ovl_new_inode(struct super_block *sb, umode_t mode, ++ struct ovl_entry *oe); ++/* dir.c */ ++extern const struct inode_operations ovl_dir_inode_operations; ++ ++/* copy_up.c */ ++int ovl_copy_up(struct dentry *dentry); ++int ovl_copy_up_truncate(struct dentry *dentry, loff_t size); +diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c +new file mode 100644 +index 0000000..6fcda39 +--- /dev/null ++++ b/fs/overlayfs/readdir.c +@@ -0,0 +1,559 @@ ++/* ++ * ++ * Copyright (C) 2011 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "overlayfs.h" ++ ++struct ovl_cache_entry { ++ const char *name; ++ unsigned int len; ++ unsigned int type; ++ u64 ino; ++ bool is_whiteout; ++ struct list_head l_node; ++ struct rb_node node; ++}; ++ ++struct ovl_readdir_data { ++ struct rb_root *root; ++ struct list_head *list; ++ struct list_head *middle; ++ struct dentry *dir; ++ int count; ++ int err; ++}; ++ ++struct ovl_dir_file { ++ bool is_real; ++ bool is_cached; ++ struct list_head cursor; ++ u64 cache_version; ++ struct list_head cache; ++ struct file *realfile; ++}; ++ ++static struct ovl_cache_entry *ovl_cache_entry_from_node(struct rb_node *n) ++{ ++ return container_of(n, struct ovl_cache_entry, node); ++} ++ ++static struct ovl_cache_entry *ovl_cache_entry_find(struct rb_root *root, ++ const char *name, int len) ++{ ++ struct rb_node *node = root->rb_node; ++ int cmp; ++ ++ while (node) { ++ struct ovl_cache_entry *p = ovl_cache_entry_from_node(node); ++ ++ cmp = strncmp(name, p->name, len); ++ if (cmp > 0) ++ node = p->node.rb_right; ++ else if (cmp < 0 || len < p->len) ++ node = p->node.rb_left; ++ else ++ return p; ++ } ++ ++ return NULL; ++} ++ ++static struct ovl_cache_entry *ovl_cache_entry_new(const char *name, int len, ++ u64 ino, unsigned int d_type) ++{ ++ struct ovl_cache_entry *p; ++ ++ p = kmalloc(sizeof(*p) + len + 1, GFP_KERNEL); ++ if (p) { ++ char *name_copy = (char *) (p + 1); ++ memcpy(name_copy, name, len); ++ name_copy[len] = '\0'; ++ p->name = name_copy; ++ p->len = len; ++ p->type = d_type; ++ p->ino = ino; ++ p->is_whiteout = false; ++ } ++ ++ return p; ++} ++ ++static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd, ++ const char *name, int len, u64 ino, ++ unsigned int d_type) ++{ ++ struct rb_node **newp = &rdd->root->rb_node; ++ struct rb_node *parent = NULL; ++ struct ovl_cache_entry *p; ++ ++ while (*newp) { ++ int cmp; ++ struct ovl_cache_entry *tmp; ++ ++ parent = *newp; ++ tmp = ovl_cache_entry_from_node(*newp); ++ cmp = strncmp(name, tmp->name, len); ++ if (cmp > 0) ++ newp = &tmp->node.rb_right; ++ else if (cmp < 0 || len < tmp->len) ++ newp = &tmp->node.rb_left; ++ else ++ return 0; ++ } ++ ++ p = ovl_cache_entry_new(name, len, ino, d_type); ++ if (p == NULL) ++ return -ENOMEM; ++ ++ list_add_tail(&p->l_node, rdd->list); ++ rb_link_node(&p->node, parent, newp); ++ rb_insert_color(&p->node, rdd->root); ++ ++ return 0; ++} ++ ++static int ovl_fill_lower(void *buf, const char *name, int namelen, ++ loff_t offset, u64 ino, unsigned int d_type) ++{ ++ struct ovl_readdir_data *rdd = buf; ++ struct ovl_cache_entry *p; ++ ++ rdd->count++; ++ p = ovl_cache_entry_find(rdd->root, name, namelen); ++ if (p) { ++ list_move_tail(&p->l_node, rdd->middle); ++ } else { ++ p = ovl_cache_entry_new(name, namelen, ino, d_type); ++ if (p == NULL) ++ rdd->err = -ENOMEM; ++ else ++ list_add_tail(&p->l_node, rdd->middle); ++ } ++ ++ return rdd->err; ++} ++ ++static void ovl_cache_free(struct list_head *list) ++{ ++ struct ovl_cache_entry *p; ++ struct ovl_cache_entry *n; ++ ++ list_for_each_entry_safe(p, n, list, l_node) ++ kfree(p); ++ ++ INIT_LIST_HEAD(list); ++} ++ ++static int ovl_fill_upper(void *buf, const char *name, int namelen, ++ loff_t offset, u64 ino, unsigned int d_type) ++{ ++ struct ovl_readdir_data *rdd = buf; ++ ++ rdd->count++; ++ return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type); ++} ++ ++static inline int ovl_dir_read(struct path *realpath, ++ struct ovl_readdir_data *rdd, filldir_t filler) ++{ ++ struct file *realfile; ++ int err; ++ ++ realfile = vfs_open(realpath, O_RDONLY | O_DIRECTORY, current_cred()); ++ if (IS_ERR(realfile)) ++ return PTR_ERR(realfile); ++ ++ do { ++ rdd->count = 0; ++ rdd->err = 0; ++ err = vfs_readdir(realfile, filler, rdd); ++ if (err >= 0) ++ err = rdd->err; ++ } while (!err && rdd->count); ++ fput(realfile); ++ ++ return 0; ++} ++ ++static void ovl_dir_reset(struct file *file) ++{ ++ struct ovl_dir_file *od = file->private_data; ++ enum ovl_path_type type = ovl_path_type(file->f_path.dentry); ++ ++ if (ovl_dentry_version_get(file->f_path.dentry) != od->cache_version) { ++ list_del_init(&od->cursor); ++ ovl_cache_free(&od->cache); ++ od->is_cached = false; ++ } ++ WARN_ON(!od->is_real && type != OVL_PATH_MERGE); ++ if (od->is_real && type == OVL_PATH_MERGE) { ++ fput(od->realfile); ++ od->realfile = NULL; ++ od->is_real = false; ++ } ++} ++ ++static int ovl_dir_mark_whiteouts(struct ovl_readdir_data *rdd) ++{ ++ struct ovl_cache_entry *p; ++ struct dentry *dentry; ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ ++ override_cred = prepare_creds(); ++ if (!override_cred) { ++ ovl_cache_free(rdd->list); ++ return -ENOMEM; ++ } ++ ++ /* ++ * CAP_SYS_ADMIN for getxattr ++ * CAP_DAC_OVERRIDE for lookup ++ */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); ++ old_cred = override_creds(override_cred); ++ ++ mutex_lock(&rdd->dir->d_inode->i_mutex); ++ list_for_each_entry(p, rdd->list, l_node) { ++ if (p->type != DT_LNK) ++ continue; ++ ++ dentry = lookup_one_len(p->name, rdd->dir, p->len); ++ if (IS_ERR(dentry)) ++ continue; ++ ++ p->is_whiteout = ovl_is_whiteout(dentry); ++ dput(dentry); ++ } ++ mutex_unlock(&rdd->dir->d_inode->i_mutex); ++ ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ ++ return 0; ++} ++ ++static inline int ovl_dir_read_merged(struct path *upperpath, struct path *lowerpath, ++ struct ovl_readdir_data *rdd) ++{ ++ int err; ++ struct rb_root root = RB_ROOT; ++ struct list_head middle; ++ ++ rdd->root = &root; ++ if (upperpath->dentry) { ++ rdd->dir = upperpath->dentry; ++ err = ovl_dir_read(upperpath, rdd, ovl_fill_upper); ++ if (err) ++ goto out; ++ ++ err = ovl_dir_mark_whiteouts(rdd); ++ if (err) ++ goto out; ++ } ++ /* ++ * Insert lowerpath entries before upperpath ones, this allows ++ * offsets to be reasonably constant ++ */ ++ list_add(&middle, rdd->list); ++ rdd->middle = &middle; ++ err = ovl_dir_read(lowerpath, rdd, ovl_fill_lower); ++ list_del(&middle); ++out: ++ rdd->root = NULL; ++ ++ return err; ++} ++ ++static void ovl_seek_cursor(struct ovl_dir_file *od, loff_t pos) ++{ ++ struct list_head *l; ++ loff_t off; ++ ++ l = od->cache.next; ++ for (off = 0; off < pos; off++) { ++ if (l == &od->cache) ++ break; ++ l = l->next; ++ } ++ list_move_tail(&od->cursor, l); ++} ++ ++static int ovl_readdir(struct file *file, void *buf, filldir_t filler) ++{ ++ struct ovl_dir_file *od = file->private_data; ++ int res; ++ ++ if (!file->f_pos) ++ ovl_dir_reset(file); ++ ++ if (od->is_real) { ++ res = vfs_readdir(od->realfile, filler, buf); ++ file->f_pos = od->realfile->f_pos; ++ ++ return res; ++ } ++ ++ if (!od->is_cached) { ++ struct path lowerpath; ++ struct path upperpath; ++ struct ovl_readdir_data rdd = { .list = &od->cache }; ++ ++ ovl_path_lower(file->f_path.dentry, &lowerpath); ++ ovl_path_upper(file->f_path.dentry, &upperpath); ++ ++ res = ovl_dir_read_merged(&upperpath, &lowerpath, &rdd); ++ if (res) { ++ ovl_cache_free(rdd.list); ++ return res; ++ } ++ ++ od->cache_version = ovl_dentry_version_get(file->f_path.dentry); ++ od->is_cached = true; ++ ++ ovl_seek_cursor(od, file->f_pos); ++ } ++ ++ while (od->cursor.next != &od->cache) { ++ int over; ++ loff_t off; ++ struct ovl_cache_entry *p; ++ ++ p = list_entry(od->cursor.next, struct ovl_cache_entry, l_node); ++ off = file->f_pos; ++ if (!p->is_whiteout) { ++ over = filler(buf, p->name, p->len, off, p->ino, p->type); ++ if (over) ++ break; ++ } ++ file->f_pos++; ++ list_move(&od->cursor, &p->l_node); ++ } ++ ++ return 0; ++} ++ ++static loff_t ovl_dir_llseek(struct file *file, loff_t offset, int origin) ++{ ++ loff_t res; ++ struct ovl_dir_file *od = file->private_data; ++ ++ mutex_lock(&file->f_dentry->d_inode->i_mutex); ++ if (!file->f_pos) ++ ovl_dir_reset(file); ++ ++ if (od->is_real) { ++ res = vfs_llseek(od->realfile, offset, origin); ++ file->f_pos = od->realfile->f_pos; ++ } else { ++ res = -EINVAL; ++ ++ switch (origin) { ++ case SEEK_CUR: ++ offset += file->f_pos; ++ break; ++ case SEEK_SET: ++ break; ++ default: ++ goto out_unlock; ++ } ++ if (offset < 0) ++ goto out_unlock; ++ ++ if (offset != file->f_pos) { ++ file->f_pos = offset; ++ if (od->is_cached) ++ ovl_seek_cursor(od, offset); ++ } ++ res = offset; ++ } ++out_unlock: ++ mutex_unlock(&file->f_dentry->d_inode->i_mutex); ++ ++ return res; ++} ++ ++static int ovl_dir_fsync(struct file *file, loff_t start, loff_t end, ++ int datasync) ++{ ++ struct ovl_dir_file *od = file->private_data; ++ ++ /* May need to reopen directory if it got copied up */ ++ if (!od->realfile) { ++ struct path upperpath; ++ ++ ovl_path_upper(file->f_path.dentry, &upperpath); ++ od->realfile = vfs_open(&upperpath, O_RDONLY, current_cred()); ++ if (IS_ERR(od->realfile)) ++ return PTR_ERR(od->realfile); ++ } ++ ++ return vfs_fsync_range(od->realfile, start, end, datasync); ++} ++ ++static int ovl_dir_release(struct inode *inode, struct file *file) ++{ ++ struct ovl_dir_file *od = file->private_data; ++ ++ list_del(&od->cursor); ++ ovl_cache_free(&od->cache); ++ if (od->realfile) ++ fput(od->realfile); ++ kfree(od); ++ ++ return 0; ++} ++ ++static int ovl_dir_open(struct inode *inode, struct file *file) ++{ ++ struct path realpath; ++ struct file *realfile; ++ struct ovl_dir_file *od; ++ enum ovl_path_type type; ++ ++ od = kzalloc(sizeof(struct ovl_dir_file), GFP_KERNEL); ++ if (!od) ++ return -ENOMEM; ++ ++ type = ovl_path_real(file->f_path.dentry, &realpath); ++ realfile = vfs_open(&realpath, file->f_flags, current_cred()); ++ if (IS_ERR(realfile)) { ++ kfree(od); ++ return PTR_ERR(realfile); ++ } ++ INIT_LIST_HEAD(&od->cache); ++ INIT_LIST_HEAD(&od->cursor); ++ od->is_cached = false; ++ od->realfile = realfile; ++ od->is_real = (type != OVL_PATH_MERGE); ++ file->private_data = od; ++ ++ return 0; ++} ++ ++const struct file_operations ovl_dir_operations = { ++ .read = generic_read_dir, ++ .open = ovl_dir_open, ++ .readdir = ovl_readdir, ++ .llseek = ovl_dir_llseek, ++ .fsync = ovl_dir_fsync, ++ .release = ovl_dir_release, ++}; ++ ++static int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list) ++{ ++ int err; ++ struct path lowerpath; ++ struct path upperpath; ++ struct ovl_cache_entry *p; ++ struct ovl_readdir_data rdd = { .list = list }; ++ ++ ovl_path_upper(dentry, &upperpath); ++ ovl_path_lower(dentry, &lowerpath); ++ ++ err = ovl_dir_read_merged(&upperpath, &lowerpath, &rdd); ++ if (err) ++ return err; ++ ++ err = 0; ++ ++ list_for_each_entry(p, list, l_node) { ++ if (p->is_whiteout) ++ continue; ++ ++ if (p->name[0] == '.') { ++ if (p->len == 1) ++ continue; ++ if (p->len == 2 && p->name[1] == '.') ++ continue; ++ } ++ err = -ENOTEMPTY; ++ break; ++ } ++ ++ return err; ++} ++ ++static int ovl_remove_whiteouts(struct dentry *dir, struct list_head *list) ++{ ++ struct path upperpath; ++ struct dentry *upperdir; ++ struct ovl_cache_entry *p; ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ int err; ++ ++ ovl_path_upper(dir, &upperpath); ++ upperdir = upperpath.dentry; ++ ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ return -ENOMEM; ++ ++ /* ++ * CAP_DAC_OVERRIDE for lookup and unlink ++ * CAP_SYS_ADMIN for setxattr of "trusted" namespace ++ * CAP_FOWNER for unlink in sticky directory ++ */ ++ cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ cap_raise(override_cred->cap_effective, CAP_FOWNER); ++ old_cred = override_creds(override_cred); ++ ++ err = vfs_setxattr(upperdir, ovl_opaque_xattr, "y", 1, 0); ++ if (err) ++ goto out_revert_creds; ++ ++ mutex_lock_nested(&upperdir->d_inode->i_mutex, I_MUTEX_PARENT); ++ list_for_each_entry(p, list, l_node) { ++ struct dentry *dentry; ++ int ret; ++ ++ if (!p->is_whiteout) ++ continue; ++ ++ dentry = lookup_one_len(p->name, upperdir, p->len); ++ if (IS_ERR(dentry)) { ++ printk(KERN_WARNING "overlayfs: failed to lookup whiteout %.*s: %li\n", p->len, p->name, PTR_ERR(dentry)); ++ continue; ++ } ++ ret = vfs_unlink(upperdir->d_inode, dentry); ++ dput(dentry); ++ if (ret) ++ printk(KERN_WARNING "overlayfs: failed to unlink whiteout %.*s: %i\n", p->len, p->name, ret); ++ } ++ mutex_unlock(&upperdir->d_inode->i_mutex); ++ ++out_revert_creds: ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ ++ return err; ++} ++ ++int ovl_check_empty_and_clear(struct dentry *dentry, enum ovl_path_type type) ++{ ++ int err; ++ LIST_HEAD(list); ++ ++ err = ovl_check_empty_dir(dentry, &list); ++ if (!err && type == OVL_PATH_MERGE) ++ err = ovl_remove_whiteouts(dentry, &list); ++ ++ ovl_cache_free(&list); ++ ++ return err; ++} +diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c +new file mode 100644 +index 0000000..508cf19 +--- /dev/null ++++ b/fs/overlayfs/super.c +@@ -0,0 +1,656 @@ ++/* ++ * ++ * Copyright (C) 2011 Novell Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published by ++ * the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "overlayfs.h" ++ ++MODULE_AUTHOR("Miklos Szeredi "); ++MODULE_DESCRIPTION("Overlay filesystem"); ++MODULE_LICENSE("GPL"); ++ ++struct ovl_config { ++ char *lowerdir; ++ char *upperdir; ++}; ++ ++/* private information held for overlayfs's superblock */ ++struct ovl_fs { ++ struct vfsmount *upper_mnt; ++ struct vfsmount *lower_mnt; ++ /* pathnames of lower and upper dirs, for show_options */ ++ struct ovl_config config; ++}; ++ ++/* private information held for every overlayfs dentry */ ++struct ovl_entry { ++ /* ++ * Keep "double reference" on upper dentries, so that ++ * d_delete() doesn't think it's OK to reset d_inode to NULL. ++ */ ++ struct dentry *__upperdentry; ++ struct dentry *lowerdentry; ++ union { ++ struct { ++ u64 version; ++ bool opaque; ++ }; ++ struct rcu_head rcu; ++ }; ++}; ++ ++const char *ovl_whiteout_xattr = "trusted.overlay.whiteout"; ++const char *ovl_opaque_xattr = "trusted.overlay.opaque"; ++ ++ ++enum ovl_path_type ovl_path_type(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ if (oe->__upperdentry) { ++ if (oe->lowerdentry && S_ISDIR(dentry->d_inode->i_mode)) ++ return OVL_PATH_MERGE; ++ else ++ return OVL_PATH_UPPER; ++ } else { ++ return OVL_PATH_LOWER; ++ } ++} ++ ++static struct dentry *ovl_upperdentry_dereference(struct ovl_entry *oe) ++{ ++ struct dentry *upperdentry = ACCESS_ONCE(oe->__upperdentry); ++ smp_read_barrier_depends(); ++ return upperdentry; ++} ++ ++void ovl_path_upper(struct dentry *dentry, struct path *path) ++{ ++ struct ovl_fs *ofs = dentry->d_sb->s_fs_info; ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ path->mnt = ofs->upper_mnt; ++ path->dentry = ovl_upperdentry_dereference(oe); ++} ++ ++void ovl_path_lower(struct dentry *dentry, struct path *path) ++{ ++ struct ovl_fs *ofs = dentry->d_sb->s_fs_info; ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ path->mnt = ofs->lower_mnt; ++ path->dentry = oe->lowerdentry; ++} ++ ++enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path) ++{ ++ ++ enum ovl_path_type type = ovl_path_type(dentry); ++ ++ if (type == OVL_PATH_LOWER) ++ ovl_path_lower(dentry, path); ++ else ++ ovl_path_upper(dentry, path); ++ ++ return type; ++} ++ ++struct dentry *ovl_dentry_upper(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ return ovl_upperdentry_dereference(oe); ++} ++ ++struct dentry *ovl_dentry_lower(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ return oe->lowerdentry; ++} ++ ++struct dentry *ovl_dentry_real(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ struct dentry *realdentry; ++ ++ realdentry = ovl_upperdentry_dereference(oe); ++ if (!realdentry) ++ realdentry = oe->lowerdentry; ++ ++ return realdentry; ++} ++ ++struct dentry *ovl_entry_real(struct ovl_entry *oe, bool *is_upper) ++{ ++ struct dentry *realdentry; ++ ++ realdentry = ovl_upperdentry_dereference(oe); ++ if (realdentry) { ++ *is_upper = true; ++ } else { ++ realdentry = oe->lowerdentry; ++ *is_upper = false; ++ } ++ return realdentry; ++} ++ ++bool ovl_dentry_is_opaque(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ return oe->opaque; ++} ++ ++void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ oe->opaque = opaque; ++} ++ ++void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ WARN_ON(!mutex_is_locked(&upperdentry->d_parent->d_inode->i_mutex)); ++ WARN_ON(oe->__upperdentry); ++ BUG_ON(!upperdentry->d_inode); ++ smp_wmb(); ++ oe->__upperdentry = dget(upperdentry); ++} ++ ++void ovl_dentry_version_inc(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); ++ oe->version++; ++} ++ ++u64 ovl_dentry_version_get(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ WARN_ON(!mutex_is_locked(&dentry->d_inode->i_mutex)); ++ return oe->version; ++} ++ ++bool ovl_is_whiteout(struct dentry *dentry) ++{ ++ int res; ++ char val; ++ ++ if (!dentry) ++ return false; ++ if (!dentry->d_inode) ++ return false; ++ if (!S_ISLNK(dentry->d_inode->i_mode)) ++ return false; ++ ++ res = vfs_getxattr(dentry, ovl_whiteout_xattr, &val, 1); ++ if (res == 1 && val == 'y') ++ return true; ++ ++ return false; ++} ++ ++static bool ovl_is_opaquedir(struct dentry *dentry) ++{ ++ int res; ++ char val; ++ ++ if (!S_ISDIR(dentry->d_inode->i_mode)) ++ return false; ++ ++ res = vfs_getxattr(dentry, ovl_opaque_xattr, &val, 1); ++ if (res == 1 && val == 'y') ++ return true; ++ ++ return false; ++} ++ ++static void ovl_entry_free(struct rcu_head *head) ++{ ++ struct ovl_entry *oe = container_of(head, struct ovl_entry, rcu); ++ kfree(oe); ++} ++ ++static void ovl_dentry_release(struct dentry *dentry) ++{ ++ struct ovl_entry *oe = dentry->d_fsdata; ++ ++ if (oe) { ++ dput(oe->__upperdentry); ++ dput(oe->__upperdentry); ++ dput(oe->lowerdentry); ++ call_rcu(&oe->rcu, ovl_entry_free); ++ } ++} ++ ++const struct dentry_operations ovl_dentry_operations = { ++ .d_release = ovl_dentry_release, ++}; ++ ++static struct ovl_entry *ovl_alloc_entry(void) ++{ ++ return kzalloc(sizeof(struct ovl_entry), GFP_KERNEL); ++} ++ ++static inline struct dentry *ovl_lookup_real(struct dentry *dir, struct qstr *name) ++{ ++ struct dentry *dentry; ++ ++ mutex_lock(&dir->d_inode->i_mutex); ++ dentry = lookup_one_len(name->name, dir, name->len); ++ mutex_unlock(&dir->d_inode->i_mutex); ++ ++ if (IS_ERR(dentry)) { ++ if (PTR_ERR(dentry) == -ENOENT) ++ dentry = NULL; ++ } else if (!dentry->d_inode) { ++ dput(dentry); ++ dentry = NULL; ++ } ++ return dentry; ++} ++ ++static int ovl_do_lookup(struct dentry *dentry) ++{ ++ struct ovl_entry *oe; ++ struct dentry *upperdir; ++ struct dentry *lowerdir; ++ struct dentry *upperdentry = NULL; ++ struct dentry *lowerdentry = NULL; ++ struct inode *inode = NULL; ++ int err; ++ ++ err = -ENOMEM; ++ oe = ovl_alloc_entry(); ++ if (!oe) ++ goto out; ++ ++ upperdir = ovl_dentry_upper(dentry->d_parent); ++ lowerdir = ovl_dentry_lower(dentry->d_parent); ++ ++ if (upperdir) { ++ upperdentry = ovl_lookup_real(upperdir, &dentry->d_name); ++ err = PTR_ERR(upperdentry); ++ if (IS_ERR(upperdentry)) ++ goto out_put_dir; ++ ++ if (lowerdir && upperdentry && ++ (S_ISLNK(upperdentry->d_inode->i_mode) || ++ S_ISDIR(upperdentry->d_inode->i_mode))) { ++ const struct cred *old_cred; ++ struct cred *override_cred; ++ ++ err = -ENOMEM; ++ override_cred = prepare_creds(); ++ if (!override_cred) ++ goto out_dput_upper; ++ ++ /* CAP_SYS_ADMIN needed for getxattr */ ++ cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); ++ old_cred = override_creds(override_cred); ++ ++ if (ovl_is_opaquedir(upperdentry)) { ++ oe->opaque = true; ++ } else if (ovl_is_whiteout(upperdentry)) { ++ dput(upperdentry); ++ upperdentry = NULL; ++ oe->opaque = true; ++ } ++ revert_creds(old_cred); ++ put_cred(override_cred); ++ } ++ } ++ if (lowerdir && !oe->opaque) { ++ lowerdentry = ovl_lookup_real(lowerdir, &dentry->d_name); ++ err = PTR_ERR(lowerdentry); ++ if (IS_ERR(lowerdentry)) ++ goto out_dput_upper; ++ } ++ ++ if (lowerdentry && upperdentry && ++ (!S_ISDIR(upperdentry->d_inode->i_mode) || ++ !S_ISDIR(lowerdentry->d_inode->i_mode))) { ++ dput(lowerdentry); ++ lowerdentry = NULL; ++ oe->opaque = true; ++ } ++ ++ if (lowerdentry || upperdentry) { ++ struct dentry *realdentry; ++ ++ realdentry = upperdentry ? upperdentry : lowerdentry; ++ err = -ENOMEM; ++ inode = ovl_new_inode(dentry->d_sb, realdentry->d_inode->i_mode, oe); ++ if (!inode) ++ goto out_dput; ++ } ++ ++ if (upperdentry) ++ oe->__upperdentry = dget(upperdentry); ++ ++ if (lowerdentry) ++ oe->lowerdentry = lowerdentry; ++ ++ dentry->d_fsdata = oe; ++ dentry->d_op = &ovl_dentry_operations; ++ d_add(dentry, inode); ++ ++ return 0; ++ ++out_dput: ++ dput(lowerdentry); ++out_dput_upper: ++ dput(upperdentry); ++out_put_dir: ++ kfree(oe); ++out: ++ return err; ++} ++ ++struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, ++ struct nameidata *nd) ++{ ++ int err = ovl_do_lookup(dentry); ++ ++ if (err) ++ return ERR_PTR(err); ++ ++ return NULL; ++} ++ ++static void ovl_put_super(struct super_block *sb) ++{ ++ struct ovl_fs *ufs = sb->s_fs_info; ++ ++ if (!(sb->s_flags & MS_RDONLY)) ++ mnt_drop_write(ufs->upper_mnt); ++ ++ mntput(ufs->upper_mnt); ++ mntput(ufs->lower_mnt); ++ ++ kfree(ufs->config.lowerdir); ++ kfree(ufs->config.upperdir); ++ kfree(ufs); ++} ++ ++static int ovl_remount_fs(struct super_block *sb, int *flagsp, char *data) ++{ ++ int flags = *flagsp; ++ struct ovl_fs *ufs = sb->s_fs_info; ++ ++ /* When remounting rw or ro, we need to adjust the write access to the ++ * upper fs. ++ */ ++ if (((flags ^ sb->s_flags) & MS_RDONLY) == 0) ++ /* No change to readonly status */ ++ return 0; ++ ++ if (flags & MS_RDONLY) { ++ mnt_drop_write(ufs->upper_mnt); ++ return 0; ++ } else ++ return mnt_want_write(ufs->upper_mnt); ++} ++ ++/** ++ * ovl_statfs ++ * @sb: The overlayfs super block ++ * @buf: The struct kstatfs to fill in with stats ++ * ++ * Get the filesystem statistics. As writes always target the upper layer ++ * filesystem pass the statfs to the same filesystem. ++ */ ++static int ovl_statfs(struct dentry *dentry, struct kstatfs *buf) ++{ ++ struct dentry *root_dentry = dentry->d_sb->s_root; ++ struct path path; ++ ovl_path_upper(root_dentry, &path); ++ ++ if (!path.dentry->d_sb->s_op->statfs) ++ return -ENOSYS; ++ return path.dentry->d_sb->s_op->statfs(path.dentry, buf); ++} ++ ++/** ++ * ovl_show_options ++ * ++ * Prints the mount options for a given superblock. ++ * Returns zero; does not fail. ++ */ ++static int ovl_show_options(struct seq_file *m, struct vfsmount *mnt) ++{ ++ struct super_block *sb = mnt->mnt_sb; ++ struct ovl_fs *ufs = sb->s_fs_info; ++ ++ seq_printf(m, ",lowerdir=%s", ufs->config.lowerdir); ++ seq_printf(m, ",upperdir=%s", ufs->config.upperdir); ++ return 0; ++} ++ ++static const struct super_operations ovl_super_operations = { ++ .put_super = ovl_put_super, ++ .remount_fs = ovl_remount_fs, ++ .statfs = ovl_statfs, ++ .show_options = ovl_show_options, ++}; ++ ++enum { ++ Opt_lowerdir, ++ Opt_upperdir, ++ Opt_err, ++}; ++ ++static const match_table_t ovl_tokens = { ++ {Opt_lowerdir, "lowerdir=%s"}, ++ {Opt_upperdir, "upperdir=%s"}, ++ {Opt_err, NULL} ++}; ++ ++static int ovl_parse_opt(char *opt, struct ovl_config *config) ++{ ++ char *p; ++ ++ config->upperdir = NULL; ++ config->lowerdir = NULL; ++ ++ while ((p = strsep(&opt, ",")) != NULL) { ++ int token; ++ substring_t args[MAX_OPT_ARGS]; ++ ++ if (!*p) ++ continue; ++ ++ token = match_token(p, ovl_tokens, args); ++ switch (token) { ++ case Opt_upperdir: ++ kfree(config->upperdir); ++ config->upperdir = match_strdup(&args[0]); ++ if (!config->upperdir) ++ return -ENOMEM; ++ break; ++ ++ case Opt_lowerdir: ++ kfree(config->lowerdir); ++ config->lowerdir = match_strdup(&args[0]); ++ if (!config->lowerdir) ++ return -ENOMEM; ++ break; ++ ++ default: ++ return -EINVAL; ++ } ++ } ++ return 0; ++} ++ ++static int ovl_fill_super(struct super_block *sb, void *data, int silent) ++{ ++ struct path lowerpath; ++ struct path upperpath; ++ struct inode *root_inode; ++ struct dentry *root_dentry; ++ struct ovl_entry *oe; ++ struct ovl_fs *ufs; ++ int err; ++ ++ err = -ENOMEM; ++ ufs = kmalloc(sizeof(struct ovl_fs), GFP_KERNEL); ++ if (!ufs) ++ goto out; ++ ++ err = ovl_parse_opt((char *) data, &ufs->config); ++ if (err) ++ goto out_free_ufs; ++ ++ err = -EINVAL; ++ if (!ufs->config.upperdir || !ufs->config.lowerdir) { ++ printk(KERN_ERR "overlayfs: missing upperdir or lowerdir\n"); ++ goto out_free_config; ++ } ++ ++ oe = ovl_alloc_entry(); ++ if (oe == NULL) ++ goto out_free_config; ++ ++ root_inode = ovl_new_inode(sb, S_IFDIR, oe); ++ if (!root_inode) ++ goto out_free_oe; ++ ++ err = kern_path(ufs->config.upperdir, LOOKUP_FOLLOW, &upperpath); ++ if (err) ++ goto out_put_root; ++ ++ err = kern_path(ufs->config.lowerdir, LOOKUP_FOLLOW, &lowerpath); ++ if (err) ++ goto out_put_upperpath; ++ ++ err = -ENOTDIR; ++ if (!S_ISDIR(upperpath.dentry->d_inode->i_mode) || ++ !S_ISDIR(lowerpath.dentry->d_inode->i_mode)) ++ goto out_put_lowerpath; ++ ++ sb->s_stack_depth = max(upperpath.mnt->mnt_sb->s_stack_depth, ++ lowerpath.mnt->mnt_sb->s_stack_depth) + 1; ++ ++ err = -EINVAL; ++ if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { ++ printk(KERN_ERR "overlayfs: maximum fs stacking depth exceeded\n"); ++ goto out_put_lowerpath; ++ } ++ ++ ++ ufs->upper_mnt = clone_private_mount(&upperpath); ++ err = PTR_ERR(ufs->upper_mnt); ++ if (IS_ERR(ufs->upper_mnt)) { ++ printk(KERN_ERR "overlayfs: failed to clone upperpath\n"); ++ goto out_put_lowerpath; ++ } ++ ++ ufs->lower_mnt = clone_private_mount(&lowerpath); ++ err = PTR_ERR(ufs->lower_mnt); ++ if (IS_ERR(ufs->lower_mnt)) { ++ printk(KERN_ERR "overlayfs: failed to clone lowerpath\n"); ++ goto out_put_upper_mnt; ++ } ++ ++ /* ++ * Make lower_mnt R/O. That way fchmod/fchown on lower file ++ * will fail instead of modifying lower fs. ++ */ ++ ufs->lower_mnt->mnt_flags |= MNT_READONLY; ++ ++ /* If the upper fs is r/o, we mark overlayfs r/o too */ ++ if (ufs->upper_mnt->mnt_sb->s_flags & MS_RDONLY) ++ sb->s_flags |= MS_RDONLY; ++ ++ if (!(sb->s_flags & MS_RDONLY)) { ++ err = mnt_want_write(ufs->upper_mnt); ++ if (err) ++ goto out_put_lower_mnt; ++ } ++ ++ err = -ENOMEM; ++ root_dentry = d_alloc_root(root_inode); ++ if (!root_dentry) ++ goto out_drop_write; ++ ++ mntput(upperpath.mnt); ++ mntput(lowerpath.mnt); ++ ++ oe->__upperdentry = dget(upperpath.dentry); ++ oe->lowerdentry = lowerpath.dentry; ++ ++ root_dentry->d_fsdata = oe; ++ root_dentry->d_op = &ovl_dentry_operations; ++ ++ sb->s_op = &ovl_super_operations; ++ sb->s_root = root_dentry; ++ sb->s_fs_info = ufs; ++ ++ return 0; ++ ++out_drop_write: ++ if (!(sb->s_flags & MS_RDONLY)) ++ mnt_drop_write(ufs->upper_mnt); ++out_put_lower_mnt: ++ mntput(ufs->lower_mnt); ++out_put_upper_mnt: ++ mntput(ufs->upper_mnt); ++out_put_lowerpath: ++ path_put(&lowerpath); ++out_put_upperpath: ++ path_put(&upperpath); ++out_put_root: ++ iput(root_inode); ++out_free_oe: ++ kfree(oe); ++out_free_config: ++ kfree(ufs->config.lowerdir); ++ kfree(ufs->config.upperdir); ++out_free_ufs: ++ kfree(ufs); ++out: ++ return err; ++} ++ ++static struct dentry *ovl_mount(struct file_system_type *fs_type, int flags, ++ const char *dev_name, void *raw_data) ++{ ++ return mount_nodev(fs_type, flags, raw_data, ovl_fill_super); ++} ++ ++static struct file_system_type ovl_fs_type = { ++ .owner = THIS_MODULE, ++ .name = "overlayfs", ++ .mount = ovl_mount, ++ .kill_sb = kill_anon_super, ++}; ++ ++static int __init ovl_init(void) ++{ ++ return register_filesystem(&ovl_fs_type); ++} ++ ++static void __exit ovl_exit(void) ++{ ++ unregister_filesystem(&ovl_fs_type); ++} ++ ++module_init(ovl_init); ++module_exit(ovl_exit); +diff --git a/fs/splice.c b/fs/splice.c +index 3bd1700..a12a11f 100644 +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -1329,6 +1329,7 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, + + return ret; + } ++EXPORT_SYMBOL(do_splice_direct); + + static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe, + struct pipe_inode_info *opipe, +diff --git a/include/linux/fs.h b/include/linux/fs.h +index 269e920..2a1497c 100644 +--- a/include/linux/fs.h ++++ b/include/linux/fs.h +@@ -1656,6 +1667,7 @@ struct inode_operations { + void (*truncate_range)(struct inode *, loff_t, loff_t); + int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, + u64 len); ++ struct file *(*open)(struct dentry *, int flags, const struct cred *); + } ____cacheline_aligned; + + struct seq_file; +diff --git a/include/linux/mount.h b/include/linux/mount.h +index 33fe53d..30cd21e 100644 +--- a/include/linux/mount.h ++++ b/include/linux/mount.h +@@ -100,5 +100,8 @@ extern void mnt_pin(struct vfsmount *mnt); + extern void mnt_unpin(struct vfsmount *mnt); + extern int __mnt_is_readonly(struct vfsmount *mnt); + ++struct path; ++extern struct vfsmount *clone_private_mount(struct path *path); ++ + extern struct vfsmount *do_kern_mount(const char *fstype, int flags, + const char *name, void *data); + +--- original/include/linux/fs.h 2016-11-20 01:01:45.000000000 +0000 ++++ linux-3.2.84/include/linux/fs.h 2017-02-18 18:00:23.041049898 +0000 +@@ -2087,6 +2088,7 @@ extern struct file *file_open_root(struc + const char *, int, umode_t); + extern struct file * dentry_open(struct dentry *, struct vfsmount *, int, + const struct cred *); ++extern struct file *vfs_open(struct path *, int flags, const struct cred *); + extern int filp_close(struct file *, fl_owner_t id); + extern char * getname(const char __user *); + diff --git a/packages/base/any/kernels/3.2-lts/patches/overlayfs_notify.patch b/packages/base/any/kernels/3.2-lts/patches/overlayfs_notify.patch new file mode 100644 index 00000000..e5af6d21 --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/patches/overlayfs_notify.patch @@ -0,0 +1,264 @@ +Fix issues with OverlayFS not interacting correctly with the notify system + +diff --git a/fs/notify/inotify/Kconfig b/fs/notify/inotify/Kconfig +index b981fc0..137d3fa 100644 +--- a/fs/notify/inotify/Kconfig ++++ b/fs/notify/inotify/Kconfig +@@ -15,3 +15,13 @@ config INOTIFY_USER + For more information, see + + If unsure, say Y. ++ ++ ++config INOTIFY_STACKFS ++ bool "Inotify support for stackable filesystem" ++ select INOTIFY_USER ++ default y ++ ---help--- ++ Say Y here to enable inotify support for stackable filesystem. ++ ++ If unsure, say N. +diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c +index f255d37..e555ac5 100644 +--- a/fs/notify/inotify/inotify_user.c ++++ b/fs/notify/inotify/inotify_user.c +@@ -24,6 +24,7 @@ + + #include + #include /* struct inode */ ++#include + #include + #include + #include /* module_init */ +@@ -86,6 +87,93 @@ ctl_table inotify_table[] = { + }; + #endif /* CONFIG_SYSCTL */ + ++#ifdef CONFIG_INOTIFY_STACKFS ++ ++static DEFINE_RWLOCK(inotify_fs_lock); ++static LIST_HEAD(inotify_fs_list); ++ ++static inline struct file_system_type* peek_fs_type(struct path *path) ++{ ++ return path->mnt->mnt_sb->s_type; ++} ++ ++static struct inotify_stackfs* inotify_get_stackfs(struct path *path) ++{ ++ struct file_system_type *fs; ++ struct inotify_stackfs *fse, *ret = NULL; ++ ++ fs = peek_fs_type(path); ++ ++ read_lock(&inotify_fs_lock); ++ list_for_each_entry(fse, &inotify_fs_list, list) { ++ if (fse->fs_type == fs) { ++ ret = fse; ++ break; ++ } ++ } ++ read_unlock(&inotify_fs_lock); ++ ++ return ret; ++} ++ ++static inline void inotify_put_stackfs(struct inotify_stackfs *fs) ++{ ++} ++ ++int inotify_register_stackfs(struct inotify_stackfs *fs) ++{ ++ int ret = 0; ++ struct inotify_stackfs *fse; ++ ++ BUG_ON(IS_ERR_OR_NULL(fs->fs_type)); ++ BUG_ON(IS_ERR_OR_NULL(fs->func)); ++ ++ INIT_LIST_HEAD(&fs->list); ++ ++ write_lock(&inotify_fs_lock); ++ list_for_each_entry(fse, &inotify_fs_list, list) { ++ if (fse->fs_type == fs->fs_type) { ++ write_unlock(&inotify_fs_lock); ++ ret = -EBUSY; ++ goto out; ++ } ++ } ++ list_add_tail(&fs->list, &inotify_fs_list); ++ write_unlock(&inotify_fs_lock); ++ ++out: ++ return ret; ++} ++EXPORT_SYMBOL_GPL(inotify_register_stackfs); ++ ++void inotify_unregister_stackfs(struct inotify_stackfs *fs) ++{ ++ struct inotify_stackfs *fse, *n; ++ ++ write_lock(&inotify_fs_lock); ++ list_for_each_entry_safe(fse, n, &inotify_fs_list, list) { ++ if (fse == fs) { ++ list_del(&fse->list); ++ break; ++ } ++ } ++ write_unlock(&inotify_fs_lock); ++} ++EXPORT_SYMBOL_GPL(inotify_unregister_stackfs); ++ ++#else ++ ++static inline struct inotify_stackfs* inotify_get_stackfs(struct path *path) ++{ ++ return NULL; ++} ++ ++static inline void inotify_put_stackfs(struct inotify_stackfs *fs) ++{ ++} ++ ++#endif /* CONFIG_INOTIFY_STACKFS */ ++ + static inline __u32 inotify_arg_to_mask(u32 arg) + { + __u32 mask; +@@ -348,7 +436,7 @@ static const struct file_operations inotify_fops = { + /* + * find_inode - resolve a user-given path to a specific inode + */ +-static int inotify_find_inode(const char __user *dirname, struct path *path, unsigned flags) ++static inline int __inotify_find_inode(const char __user *dirname, struct path *path, unsigned flags) + { + int error; + +@@ -362,6 +450,27 @@ static int inotify_find_inode(const char __user *dirname, struct path *path, uns + return error; + } + ++static int inotify_find_inode(const char __user *dirname, struct path *path, unsigned flags) ++{ ++ int ret; ++ struct path tpath; ++ struct inotify_stackfs *fse; ++ ++ ret = __inotify_find_inode(dirname, &tpath, flags); ++ if (ret) ++ return ret; ++ fse = inotify_get_stackfs(&tpath); ++ if (fse == NULL) { ++ *path = tpath; ++ return 0; ++ } ++ ret = fse->func(path, &tpath); ++ inotify_put_stackfs(fse); ++ path_put(&tpath); ++ ++ return ret; ++} ++ + static int inotify_add_to_idr(struct idr *idr, spinlock_t *idr_lock, + int *last_wd, + struct inotify_inode_mark *i_mark) +diff --git a/overlayfs/super.c b/fs/overlayfs/super.c +index 508cf19..cb39ec9 100644 +--- a/fs/overlayfs/super.c ++++ b/fs/overlayfs/super.c +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #include "overlayfs.h" + + MODULE_AUTHOR("Miklos Szeredi "); +@@ -642,14 +643,40 @@ static struct file_system_type ovl_fs_type = { + .kill_sb = kill_anon_super, + }; + ++static int ovl_inotify_path(struct path *dst, struct path *src) ++{ ++ ovl_path_real(src->dentry, dst); ++ ++ path_get(dst); ++ ++ return 0; ++} ++ ++static struct inotify_stackfs ovl_inotify = { ++ .fs_type = &ovl_fs_type, ++ .func = ovl_inotify_path, ++}; ++ + static int __init ovl_init(void) + { +- return register_filesystem(&ovl_fs_type); ++ int ret; ++ ++ ret = register_filesystem(&ovl_fs_type); ++ if (ret) ++ return ret; ++ ret = inotify_register_stackfs(&ovl_inotify); ++ if (ret) { ++ pr_err("overlayfs: hook inotify error\n"); ++ unregister_filesystem(&ovl_fs_type); ++ } ++ ++ return ret; + } + + static void __exit ovl_exit(void) + { +- unregister_filesystem(&ovl_fs_type); ++ inotify_unregister_stackfs(&ovl_inotify); ++ unregister_filesystem(&ovl_fs_type); + } + + module_init(ovl_init); +diff --git a/include/linux/inotify.h b/include/linux/inotify.h +index d33041e..9d7e36f 100644 +--- a/include/linux/inotify.h ++++ b/include/linux/inotify.h +@@ -10,6 +10,8 @@ + /* For O_CLOEXEC and O_NONBLOCK */ + #include + #include ++#include ++#include + + /* + * struct inotify_event - structure read from the inotify device for each event +@@ -82,6 +84,32 @@ extern struct ctl_table inotify_table[]; /* for sysctl */ + IN_DONT_FOLLOW | IN_EXCL_UNLINK | IN_MASK_ADD | \ + IN_ISDIR | IN_ONESHOT) + ++typedef int (*inotify_path_proc)(struct path *dst, struct path *src); ++ ++struct inotify_stackfs { ++ struct list_head list; /* entry in inotify_fs_list */ ++ struct file_system_type *fs_type; /* registed file_system_type */ ++ inotify_path_proc func; /* registed callback function */ ++}; ++ ++#ifdef CONFIG_INOTIFY_STACKFS ++ ++extern int inotify_register_stackfs(struct inotify_stackfs *fs); ++extern void inotify_unregister_stackfs(struct inotify_stackfs *fs); ++ ++#else ++ ++static inline int inotify_register_stackfs(struct inotify_stackfs *fs) ++{ ++ return 0; ++} ++ ++static inline void inotify_unregister_stackfs(struct inotify_stackfs *fs) ++{ ++} ++ ++#endif /* CONFIG_INOTIFY_STACKFS */ ++ + #endif + + #endif /* _LINUX_INOTIFY_H */ diff --git a/packages/base/any/kernels/3.2-lts/patches/series b/packages/base/any/kernels/3.2-lts/patches/series new file mode 100644 index 00000000..1632d4bf --- /dev/null +++ b/packages/base/any/kernels/3.2-lts/patches/series @@ -0,0 +1,3 @@ +kernel-overlayfs-v11.patch +kernel-fs-overlayfs-inode.patch +overlayfs_notify.patch From 7a777f87b8270498112bddd9350e1b0290082f21 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 08:35:21 -0700 Subject: [PATCH 15/31] Add 3.2 LTS. --- packages/base/amd64/upgrade/builds/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/base/amd64/upgrade/builds/Makefile b/packages/base/amd64/upgrade/builds/Makefile index 3a7d529c..ef428d0f 100644 --- a/packages/base/amd64/upgrade/builds/Makefile +++ b/packages/base/amd64/upgrade/builds/Makefile @@ -1,7 +1,8 @@ include $(ONL)/make/config.amd64.mk # All amd64 kernels -KERNELS := $(shell $(ONLPM) --find-file onl-kernel-3.16-lts-x86-64-all:amd64 kernel-3.16-lts-x86_64-all) \ +KERNELS := $(shell $(ONLPM) --find-file onl-kernel-3.2-lts-x86-64-all:amd64 kernel-3.2-lts-x86_64-all) \ + $(shell $(ONLPM) --find-file onl-kernel-3.16-lts-x86-64-all:amd64 kernel-3.16-lts-x86_64-all) \ $(shell $(ONLPM) --find-file onl-kernel-4.9-lts-x86-64-all:amd64 kernel-4.9-lts-x86_64-all) From 4c9ca4145e85694ec76191a9d7806567fbe28850 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 08:35:55 -0700 Subject: [PATCH 16/31] 3.2 LTS build for x86_64. --- .../kernel-3.2-lts-x86-64-all/Makefile | 1 + .../kernels/kernel-3.2-lts-x86-64-all/PKG.yml | 29 +++++++++++++++++++ .../builds/.gitignore | 3 ++ .../kernel-3.2-lts-x86-64-all/builds/Makefile | 21 ++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/Makefile create mode 100644 packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/PKG.yml create mode 100644 packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/.gitignore create mode 100644 packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/Makefile diff --git a/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/Makefile b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/PKG.yml b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/PKG.yml new file mode 100644 index 00000000..fb1574b2 --- /dev/null +++ b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/PKG.yml @@ -0,0 +1,29 @@ +variables: + basename: onl-kernel-3.2-lts-x86-64-all + +common: + arch: amd64 + version: 1.0.0 + copyright: Copyright 2013, 2014, 2015 Big Switch Networks + maintainer: support@bigswitch.com + support: opennetworklinux@googlegroups.com + +packages: + - name: $basename + version: 1.0.0 + summary: Open Network Linux 3.2 LTS Kernel for X86_64 Platforms. + + files: + builds/kernel-3.2* : $$PKG_INSTALL/ + builds/linux-*mbuild : $$PKG_INSTALL/mbuilds + + changelog: Change changes changes., + + - name: $basename-modules + version: 1.0.0 + summary: Open Network Linux 3.2 LTS Kernel Modules for X86_64 Platforms + + files: + builds/lib: /lib + + changelog: Change changes changes., diff --git a/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/.gitignore b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/.gitignore new file mode 100644 index 00000000..73d2c193 --- /dev/null +++ b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/.gitignore @@ -0,0 +1,3 @@ +linux-* +kernel-* +lib diff --git a/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/Makefile b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/Makefile new file mode 100644 index 00000000..3afd0097 --- /dev/null +++ b/packages/base/amd64/kernels/kernel-3.2-lts-x86-64-all/builds/Makefile @@ -0,0 +1,21 @@ +# -*- Makefile -*- +############################################################ +# +# +# Copyright 2013, 2014 BigSwitch Networks, Inc. +# +# +# +# +############################################################ +THIS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) + +include $(ONL)/make/config.mk + +kernel: + $(MAKE) -C $(ONL)/packages/base/any/kernels/3.2-lts/configs/x86_64-all K_TARGET_DIR=$(THIS_DIR) $(ONL_MAKE_PARALLEL) + rm -rf lib + ARCH=x86_64 $(ONL)/tools/scripts/kmodbuild.sh linux-3.2.84-mbuild "$(wildcard $(ONL)/packages/base/any/kernels/modules/*)" onl/onl/common + +clean: + rm -rf linux-3.2* kernel-3.2* From 623e901516b17cce4d10b16ddac204d8a11bfe7b Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 15:46:46 +0000 Subject: [PATCH 17/31] Add 3.2 LTS option for x86. --- .../src/lib/platform-config-defaults-x86-64.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml b/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml index d67dc85d..28c29814 100644 --- a/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml +++ b/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml @@ -19,6 +19,10 @@ default: # this is mostly to *reject* invalid disk labels, # since we will never create our own + kernel-3.2: &kernel-3-2 + =: kernel-3.2-lts-x86_64-all + package: onl-kernel-3.2-lts-x86-64-all:amd64 + kernel-3.16: &kernel-3-16 =: kernel-3.16-lts-x86_64-all package: onl-kernel-3.16-lts-x86-64-all:amd64 From 3c45fab2a55761e88ad021b93b07d26b765da90c Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 13 Jun 2017 16:27:57 +0000 Subject: [PATCH 18/31] Add 3.2 prerequisite. --- packages/base/amd64/upgrade/PKG.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/base/amd64/upgrade/PKG.yml b/packages/base/amd64/upgrade/PKG.yml index 3717282f..ae40b753 100644 --- a/packages/base/amd64/upgrade/PKG.yml +++ b/packages/base/amd64/upgrade/PKG.yml @@ -1,5 +1,6 @@ prerequisites: packages: + - onl-kernel-3.2-lts-x86-64-all:amd64 - onl-kernel-3.16-lts-x86-64-all:amd64 - onl-kernel-4.9-lts-x86-64-all:amd64 - onl-loader-initrd:amd64 From 69e76582e4e2880bf1ff877b7ae5bbd260204d97 Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Wed, 14 Jun 2017 14:50:53 +0800 Subject: [PATCH 19/31] [as6712-32x] Support YM-2401J AC power --- .../builds/x86-64-accton-as6712-32x-psu.c | 171 +++++++++++++----- .../onlp/builds/src/module/src/fani.c | 84 +++++++-- .../onlp/builds/src/module/src/platform_lib.c | 127 +++++++++++-- .../onlp/builds/src/module/src/platform_lib.h | 43 +++-- .../onlp/builds/src/module/src/psui.c | 97 +++++++--- .../x86_64_accton_as6712_32x_r0/__init__.py | 19 +- 6 files changed, 399 insertions(+), 142 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/modules/builds/x86-64-accton-as6712-32x-psu.c b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/modules/builds/x86-64-accton-as6712-32x-psu.c index bae3afe0..3c2b03a0 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/modules/builds/x86-64-accton-as6712-32x-psu.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/modules/builds/x86-64-accton-as6712-32x-psu.c @@ -32,14 +32,22 @@ #include #include +#define PSU_STATUS_I2C_ADDR 0x60 +#define PSU_STATUS_I2C_REG_OFFSET 0x2 + +#define IS_POWER_GOOD(id, value) (!!(value & BIT(id*4 + 1))) +#define IS_PRESENT(id, value) (!(value & BIT(id*4))) + +static ssize_t show_index(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf); static int as6712_32x_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); extern int as6712_32x_i2c_cpld_read(unsigned short cpld_addr, u8 reg); +static int as6712_32x_psu_model_name_get(struct device *dev); /* Addresses scanned */ -static const unsigned short normal_i2c[] = { 0x50, 0x53, I2C_CLIENT_END }; +static const unsigned short normal_i2c[] = { I2C_CLIENT_END }; /* Each client has this additional data */ @@ -56,6 +64,7 @@ struct as6712_32x_psu_data { static struct as6712_32x_psu_data *as6712_32x_psu_update_device(struct device *dev); enum as6712_32x_psu_sysfs_attributes { + PSU_INDEX, PSU_PRESENT, PSU_MODEL_NAME, PSU_POWER_GOOD @@ -63,17 +72,28 @@ enum as6712_32x_psu_sysfs_attributes { /* sysfs attributes for hwmon */ +static SENSOR_DEVICE_ATTR(psu_index, S_IRUGO, show_index, NULL, PSU_INDEX); static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT); static SENSOR_DEVICE_ATTR(psu_model_name, S_IRUGO, show_model_name,NULL, PSU_MODEL_NAME); static SENSOR_DEVICE_ATTR(psu_power_good, S_IRUGO, show_status, NULL, PSU_POWER_GOOD); static struct attribute *as6712_32x_psu_attributes[] = { + &sensor_dev_attr_psu_index.dev_attr.attr, &sensor_dev_attr_psu_present.dev_attr.attr, &sensor_dev_attr_psu_model_name.dev_attr.attr, &sensor_dev_attr_psu_power_good.dev_attr.attr, NULL }; +static ssize_t show_index(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as6712_32x_psu_data *data = i2c_get_clientdata(client); + + return sprintf(buf, "%d\n", data->index); +} + static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf) { @@ -81,11 +101,15 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da, struct as6712_32x_psu_data *data = as6712_32x_psu_update_device(dev); u8 status = 0; + if (!data->valid) { + return sprintf(buf, "0\n"); + } + if (attr->index == PSU_PRESENT) { - status = !(data->status >> ((data->index-1)*4) & 0x1); + status = IS_PRESENT(data->index, data->status); } else { /* PSU_POWER_GOOD */ - status = data->status >> ((data->index-1)*4 + 1) & 0x1; + status = IS_POWER_GOOD(data->index, data->status); } return sprintf(buf, "%d\n", status); @@ -96,6 +120,17 @@ static ssize_t show_model_name(struct device *dev, struct device_attribute *da, { struct as6712_32x_psu_data *data = as6712_32x_psu_update_device(dev); + if (!data->valid) { + return 0; + } + + if (!IS_PRESENT(data->index, data->status)) { + return 0; + } + + if (as6712_32x_psu_model_name_get(dev) < 0) { + return -ENXIO; + } return sprintf(buf, "%s\n", data->model_name); } @@ -122,6 +157,7 @@ static int as6712_32x_psu_probe(struct i2c_client *client, i2c_set_clientdata(client, data); data->valid = 0; + data->index = dev_id->driver_data; mutex_init(&data->update_lock); dev_info(&client->dev, "chip found\n"); @@ -138,14 +174,6 @@ static int as6712_32x_psu_probe(struct i2c_client *client, goto exit_remove; } - /* Update PSU index */ - if (client->addr == 0x50 || client->addr == 0x38) { - data->index = 1; - } - else if (client->addr == 0x53 || client->addr == 0x3b) { - data->index = 2; - } - dev_info(&client->dev, "%s: psu '%s'\n", dev_name(data->hwmon_dev), client->name); @@ -171,8 +199,15 @@ static int as6712_32x_psu_remove(struct i2c_client *client) return 0; } +enum psu_index +{ + as6712_32x_psu1, + as6712_32x_psu2 +}; + static const struct i2c_device_id as6712_32x_psu_id[] = { - { "as6712_32x_psu", 0 }, + { "as6712_32x_psu1", as6712_32x_psu1 }, + { "as6712_32x_psu2", as6712_32x_psu2 }, {} }; MODULE_DEVICE_TABLE(i2c, as6712_32x_psu_id); @@ -217,6 +252,75 @@ static int as6712_32x_psu_read_block(struct i2c_client *client, u8 command, u8 * return result; } +enum psu_type { + PSU_YM_2401_JCR, /* AC110V - F2B */ + PSU_YM_2401_JDR, /* AC110V - B2F */ + PSU_CPR_4011_4M11, /* AC110V - F2B */ + PSU_CPR_4011_4M21, /* AC110V - B2F */ + PSU_CPR_6011_2M11, /* AC110V - F2B */ + PSU_CPR_6011_2M21, /* AC110V - B2F */ + PSU_UM400D_01G, /* DC48V - F2B */ + PSU_UM400D01_01G /* DC48V - B2F */ +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + char* model_name; +}; + +struct model_name_info models[] = { +{PSU_YM_2401_JCR, 0x20, 11, "YM-2401JCR"}, +{PSU_YM_2401_JDR, 0x20, 11, "YM-2401JDR"}, +{PSU_CPR_4011_4M11, 0x26, 13, "CPR-4011-4M11"}, +{PSU_CPR_4011_4M21, 0x26, 13, "CPR-4011-4M21"}, +{PSU_CPR_6011_2M11, 0x26, 13, "CPR-6011-2M11"}, +{PSU_CPR_6011_2M21, 0x26, 13, "CPR-6011-2M21"}, +{PSU_UM400D_01G, 0x50, 9, "um400d01G"}, +{PSU_UM400D01_01G, 0x50, 12, "um400d01-01G"}, +}; + +static int as6712_32x_psu_model_name_get(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as6712_32x_psu_data *data = i2c_get_clientdata(client); + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data->model_name, 0, sizeof(data->model_name)); + + status = as6712_32x_psu_read_block(client, models[i].offset, + data->model_name, models[i].length); + if (status < 0) { + data->model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data->model_name[models[i].length] = '\0'; + } + + if (i == PSU_YM_2401_JCR || i == PSU_YM_2401_JDR) { + /* Skip the meaningless data byte 8*/ + data->model_name[8] = data->model_name[9]; + data->model_name[9] = data->model_name[10]; + data->model_name[10] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data->model_name, models[i].model_name, models[i].length) == 0) { + return 0; + } + else { + data->model_name[0] = '\0'; + } + } + + return -ENODATA; +} static struct as6712_32x_psu_data *as6712_32x_psu_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); @@ -226,56 +330,27 @@ static struct as6712_32x_psu_data *as6712_32x_psu_update_device(struct device *d if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { - int status; - int present = 0; + int status = -1; - dev_dbg(&client->dev, "Starting as6712_32x update\n"); + dev_dbg(&client->dev, "Starting as6812_32x update\n"); + data->valid = 0; /* Read psu status */ - status = as6712_32x_i2c_cpld_read(0x60, 0x2); + status = as6712_32x_i2c_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET); if (status < 0) { - dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); + dev_dbg(&client->dev, "cpld reg (0x%x) err %d\n", PSU_STATUS_I2C_ADDR, status); + goto exit; } else { data->status = status; } - - /* Read model name */ - memset(data->model_name, 0, sizeof(data->model_name)); - present = !(data->status >> ((data->index-1)*4) & 0x1); - if (present) { - u8 command; - int model_name_len = 0; - - if (client->addr == 0x38 || client->addr == 0x3b) { - /* cpr_4011_4mxx AC power */ - command = 0x26; - model_name_len = 13; - } - else { /* 0x50 & 0x53 */ - /* um400d01x DC power */ - command = 0x50; - model_name_len = 13; - } - - status = as6712_32x_psu_read_block(client,command,data->model_name, - model_name_len); - - if (status < 0) { - data->model_name[0] = '\0'; - dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); - } - else { - data->model_name[model_name_len] = '\0'; - } - } - data->last_updated = jiffies; data->valid = 1; } +exit: mutex_unlock(&data->update_lock); return data; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/fani.c b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/fani.c index a63e3d29..eb34c50e 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/fani.c @@ -24,7 +24,8 @@ * ***********************************************************/ #include -#include +#include +#include #include #include "platform_lib.h" @@ -128,6 +129,22 @@ onlp_fan_info_t linfo[] = { if (close(fd) == -1) \ return ONLP_STATUS_E_INTERNAL +/* PSU relative marco */ +#define SET_PSU_TYPE_AC_F2B_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); \ + info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE + +#define SET_PSU_TYPE_AC_B2F_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); \ + info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE + +#define SET_PSU_TYPE_UM400D_F2B_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B) + +#define SET_PSU_TYPE_UM400D_B2F_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F) + + static int _onlp_fani_info_get_fan(int local_id, onlp_fan_info_t* info) { @@ -178,10 +195,26 @@ _onlp_fani_info_get_fan(int local_id, onlp_fan_info_t* info) return ONLP_STATUS_OK; } +static int +_onlp_fani_info_get_fan_on_psu_ym2401(int pid, onlp_fan_info_t* info) +{ + int val = 0; + + /* get fan status + */ + if (psu_ym2401_pmbus_info_get(pid, "psu_fan1_speed_rpm", &val) == ONLP_STATUS_OK) { + info->status |= (val > 0) ? 0 : ONLP_FAN_STATUS_FAILED; + info->rpm = val; + info->percentage = (info->rpm * 100) / 21600; + } + + return ONLP_STATUS_OK; +} + static int _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) { - int psu_id, is_ac = 0; + int psu_id; int fd, len, nbytes = 10; char r_data[10] = {0}; char fullpath[80] = {0}; @@ -197,28 +230,26 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) switch (psu_type) { - case PSU_TYPE_AC_F2B: - is_ac = 1; - info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); - info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE; + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_3YPOWER_F2B: + SET_PSU_TYPE_AC_F2B_FAN(info); break; - case PSU_TYPE_AC_B2F: - is_ac = 1; - info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); - info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE; + case PSU_TYPE_AC_COMPUWARE_B2F: + case PSU_TYPE_AC_3YPOWER_B2F: + SET_PSU_TYPE_AC_B2F_FAN(info); break; case PSU_TYPE_DC_48V_F2B: - info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); + SET_PSU_TYPE_UM400D_F2B_FAN(info); break; case PSU_TYPE_DC_48V_B2F: - info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); - break; + SET_PSU_TYPE_UM400D_B2F_FAN(info); + break; default: DEBUG_PRINT("[Debug][%s][%d][psu_type=%d]\n", __FUNCTION__, __LINE__, psu_type); break; } - - if (is_ac) + if (psu_type == PSU_TYPE_AC_COMPUWARE_F2B || + psu_type == PSU_TYPE_AC_COMPUWARE_B2F ) { /* get fan fault status */ @@ -234,8 +265,12 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) info->rpm = atoi(r_data); /* get speed percentage from rpm */ - info->percentage = (info->rpm * 100) / MAX_PSU_FAN_SPEED; - info->status |= ONLP_FAN_STATUS_PRESENT; + info->percentage = (info->rpm * 100)/MAX_PSU_FAN_SPEED; + } + else if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) + { + return _onlp_fani_info_get_fan_on_psu_ym2401(psu_id, info); } return ONLP_STATUS_OK; @@ -324,8 +359,21 @@ onlp_fani_percentage_set(onlp_oid_t id, int p) { case FAN_1_ON_PSU1: case FAN_1_ON_PSU2: - sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].ctrl_speed); + { + int psu_id; + psu_type_t psu_type; + + psu_id = local_id - FAN_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + return psu_ym2401_pmbus_info_set(psu_id, "psu_fan1_duty_cycle_percentage", p); + } + + sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].ctrl_speed); break; + } case FAN_1_ON_MAIN_BOARD: case FAN_2_ON_MAIN_BOARD: case FAN_3_ON_MAIN_BOARD: diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.c index fb17bb04..3bb90fc8 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.c @@ -23,12 +23,13 @@ * * ***********************************************************/ -#include #include #include #include #include #include +#include +#include #include #include "platform_lib.h" @@ -64,9 +65,9 @@ int deviceNodeWrite(char *filename, char *buffer, int buf_size, int data_len) int deviceNodeWriteInt(char *filename, int value, int data_len) { char buf[8] = {0}; - sprintf(buf, "%d", value); - return deviceNodeWrite(filename, buf, (int)strlen(buf), data_len); + + return deviceNodeWrite(filename, buf, sizeof(buf)-1, data_len); } int deviceNodeReadBinary(char *filename, char *buffer, int buf_size, int data_len) @@ -102,20 +103,25 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le { int ret; - if (data_len >= buf_size) { + if (data_len >= buf_size || data_len < 0) { return -1; } ret = deviceNodeReadBinary(filename, buffer, buf_size-1, data_len); if (ret == 0) { - buffer[buf_size-1] = '\0'; + if (data_len) { + buffer[data_len] = '\0'; + } + else { + buffer[buf_size-1] = '\0'; + } } - return ret; } #define I2C_PSU_MODEL_NAME_LEN 13 +#define STRLEN(x) (sizeof(x) - 1) psu_type_t get_psu_type(int id, char* modelname, int modelname_len) { @@ -123,41 +129,122 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) char model_name[I2C_PSU_MODEL_NAME_LEN + 1] = {0}; /* Check AC model name */ - node = (id == PSU1_ID) ? PSU1_AC_HWMON_NODE(psu_model_name) : PSU2_AC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_AC_EEPROM_NODE(psu_model_name) : PSU2_AC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "CPR-4011-4M11", strlen("CPR-4011-4M11")) == 0) { + if (strncmp(model_name, "CPR-4011-4M11", STRLEN("CPR-4011-4M11")) == 0) { if (modelname) { - strncpy(modelname, model_name, modelname_len-1); + strncpy(modelname, model_name, sizeof(model_name)); } - return PSU_TYPE_AC_F2B; + return PSU_TYPE_AC_COMPUWARE_F2B; } - else if (strncmp(model_name, "CPR-4011-4M21", strlen("CPR-4011-4M21")) == 0) { + else if (strncmp(model_name, "CPR-4011-4M21", STRLEN("CPR-4011-4M21")) == 0) { if (modelname) { - strncpy(modelname, model_name, modelname_len-1); + strncpy(modelname, model_name, sizeof(model_name)); } - return PSU_TYPE_AC_B2F; + return PSU_TYPE_AC_COMPUWARE_B2F; + } + else if (strncmp(model_name, "CPR-6011-2M11", STRLEN("CPR-6011-2M11")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_F2B; + } + else if (strncmp(model_name, "CPR-6011-2M21", STRLEN("CPR-6011-2M21")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_B2F; + } + } + + /* Check 3Y-Power AC model name */ + memset(model_name, 0, sizeof(model_name)); + node = (id == PSU1_ID) ? PSU1_AC_3YPOWER_EEPROM_NODE(psu_model_name) : PSU2_AC_3YPOWER_EEPROM_NODE(psu_model_name); + + if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { + if (strncmp(model_name, "YM-2401JCR", STRLEN("YM-2401JCR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JCR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_F2B; + } + else if (strncmp(model_name, "YM-2401JDR", STRLEN("YM-2401JDR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JDR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_B2F; } } /* Check DC model name */ memset(model_name, 0, sizeof(model_name)); - node = (id == PSU1_ID) ? PSU1_DC_HWMON_NODE(psu_model_name) : PSU2_DC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_DC_EEPROM_NODE(psu_model_name) : PSU2_DC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "um400d01G", strlen("um400d01G")) == 0) { + if (strncmp(model_name, "um400d01G", STRLEN("um400d01G")) == 0) { if (modelname) { - strncpy(modelname, model_name, modelname_len-1); + model_name[STRLEN("um400d01G")] = 0; + strncpy(modelname, model_name, 10); } return PSU_TYPE_DC_48V_B2F; } - else if (strncmp(model_name, "um400d01-01G", strlen("um400d01-01G")) == 0) { + else if (strncmp(model_name, "um400d01-01G", STRLEN("um400d01-01G")) == 0) { if (modelname) { - strncpy(modelname, model_name, modelname_len-1); + model_name[STRLEN("um400d01-01G")] = 0; + strncpy(modelname, model_name, 13); } return PSU_TYPE_DC_48V_F2B; } - } - + } + return PSU_TYPE_UNKNOWN; } + +int psu_ym2401_pmbus_info_get(int id, char *node, int *value) +{ + int ret = 0; + char path[64] = {0}; + + *value = 0; + + if (PSU1_ID == id) { + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + } + else { + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + } + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ret; +} + +int psu_ym2401_pmbus_info_set(int id, char *node, int value) +{ + char path[64] = {0}; + + switch (id) { + case PSU1_ID: + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + break; + case PSU2_ID: + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + break; + default: + return ONLP_STATUS_E_UNSUPPORTED; + }; + + if (deviceNodeWriteInt(path, value, 0) < 0) { + AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.h index d7a575d9..f2bd0fea 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/platform_lib.h @@ -36,22 +36,24 @@ #define PSU1_ID 1 #define PSU2_ID 2 -#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/35-003c/" -#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/36-003f/" +#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/35-003c/" /* Compuware psu */ +#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/36-003f/" /* Compuware psu */ +#define PSU1_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/35-0058/" /* 3YPower psu */ +#define PSU2_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/36-005b/" /* 3YPower psu */ -#define PSU1_AC_PMBUS_NODE(node) PSU1_AC_PMBUS_PREFIX#node -#define PSU2_AC_PMBUS_NODE(node) PSU2_AC_PMBUS_PREFIX#node +#define PSU1_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/35-0038/" +#define PSU1_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/35-0050/" +#define PSU2_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/36-003b/" +#define PSU2_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/36-0053/" +#define PSU1_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/35-0050/" +#define PSU2_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/36-0053/" -#define PSU1_AC_HWMON_PREFIX "/sys/bus/i2c/devices/35-0038/" -#define PSU2_AC_HWMON_PREFIX "/sys/bus/i2c/devices/36-003b/" - -#define PSU1_AC_HWMON_NODE(node) PSU1_AC_HWMON_PREFIX#node -#define PSU2_AC_HWMON_NODE(node) PSU2_AC_HWMON_PREFIX#node - -#define PSU1_DC_HWMON_PREFIX "/sys/bus/i2c/devices/35-0050/" -#define PSU2_DC_HWMON_PREFIX "/sys/bus/i2c/devices/36-0053/" -#define PSU1_DC_HWMON_NODE(node) PSU1_DC_HWMON_PREFIX#node -#define PSU2_DC_HWMON_NODE(node) PSU2_DC_HWMON_PREFIX#node +#define PSU1_AC_EEPROM_NODE(node) PSU1_AC_EEPROM_PREFIX#node +#define PSU1_DC_EEPROM_NODE(node) PSU1_DC_EEPROM_PREFIX#node +#define PSU2_AC_EEPROM_NODE(node) PSU2_AC_EEPROM_PREFIX#node +#define PSU2_DC_EEPROM_NODE(node) PSU2_DC_EEPROM_PREFIX#node +#define PSU1_AC_3YPOWER_EEPROM_NODE(node) PSU1_AC_3YPOWER_EEPROM_PREFIX#node +#define PSU2_AC_3YPOWER_EEPROM_NODE(node) PSU2_AC_3YPOWER_EEPROM_PREFIX#node #define IDPROM_PATH "/sys/class/i2c-adapter/i2c-1/1-0057/eeprom" @@ -61,20 +63,25 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le typedef enum psu_type { PSU_TYPE_UNKNOWN, - PSU_TYPE_AC_F2B, - PSU_TYPE_AC_B2F, + PSU_TYPE_AC_COMPUWARE_F2B, + PSU_TYPE_AC_COMPUWARE_B2F, + PSU_TYPE_AC_3YPOWER_F2B, + PSU_TYPE_AC_3YPOWER_B2F, PSU_TYPE_DC_48V_F2B, PSU_TYPE_DC_48V_B2F } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_ym2401_pmbus_info_get(int id, char *node, int *value); +int psu_ym2401_pmbus_info_set(int id, char *node, int value); #define DEBUG_MODE 0 #if (DEBUG_MODE == 1) - #define DEBUG_PRINT(format, ...) printf(format, __VA_ARGS__) + #define DEBUG_PRINT(fmt, args...) \ + printf("%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) #else - #define DEBUG_PRINT(format, ...) + #define DEBUG_PRINT(fmt, args...) #endif #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/psui.c index daba9080..56801ce2 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/psui.c @@ -24,7 +24,6 @@ * ***********************************************************/ #include -#include #include #include #include "platform_lib.h" @@ -43,7 +42,7 @@ } while(0) static int -psu_status_info_get(int id, char *node, int *value) +psu_status_info_get(int id, int is_ac, char *node, int *value) { int ret = 0; char buf[PSU_NODE_MAX_INT_LEN + 1] = {0}; @@ -52,12 +51,12 @@ psu_status_info_get(int id, char *node, int *value) *value = 0; if (PSU1_ID == id) { - sprintf(node_path, "%s%s", PSU1_AC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU1_AC_EEPROM_PREFIX : PSU1_DC_EEPROM_PREFIX, node); } else if (PSU2_ID == id) { - sprintf(node_path, "%s%s", PSU2_AC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU2_AC_EEPROM_PREFIX : PSU2_DC_EEPROM_PREFIX, node); } - + ret = deviceNodeReadString(node_path, buf, sizeof(buf), 0); if (ret == 0) { @@ -92,25 +91,6 @@ psu_cpr_4011_pmbus_info_get(int id, char *node, int *value) return ret; } -int -psu_um400d_info_get(onlp_psu_info_t* info) -{ - int index = ONLP_OID_ID_GET(info->hdr.id); - - /* Set capability - */ - info->caps = ONLP_PSU_CAPS_DC48; - - if (info->status & ONLP_PSU_STATUS_FAILED) { - return ONLP_STATUS_OK; - } - - /* Set the associated oid_table */ - info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); - - return ONLP_STATUS_OK; -} - int onlp_psui_init(void) { @@ -169,6 +149,62 @@ psu_cpr_4011_info_get(onlp_psu_info_t* info) return ONLP_STATUS_OK; } +int +psu_um400d_info_get(onlp_psu_info_t* info) +{ + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_DC48; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + + return ONLP_STATUS_OK; +} + +static int +psu_ym2401_info_get(onlp_psu_info_t* info) +{ + int val = 0; + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_AC; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT); + + /* Read voltage, current and power */ + if (psu_ym2401_pmbus_info_get(index, "psu_v_out", &val) == 0) { + info->mvout = val; + info->caps |= ONLP_PSU_CAPS_VOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_i_out", &val) == 0) { + info->miout = val; + info->caps |= ONLP_PSU_CAPS_IOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_p_out", &val) == 0) { + info->mpout = val; + info->caps |= ONLP_PSU_CAPS_POUT; + } + + return ONLP_STATUS_OK; +} + /* * Get all information about the given PSU oid. */ @@ -197,7 +233,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) *info = pinfo[index]; /* Set the onlp_oid_hdr_t */ /* Get the present state */ - if (psu_status_info_get(index, "psu_present", &val) != 0) { + if (psu_status_info_get(index, 1, "psu_present", &val) != 0) { printf("Unable to read PSU(%d) node(psu_present)\r\n", index); } @@ -209,12 +245,13 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) /* Get power good status */ - if (psu_status_info_get(index, "psu_power_good", &val) != 0) { + if (psu_status_info_get(index, 1, "psu_power_good", &val) != 0) { printf("Unable to read PSU(%d) node(psu_power_good)\r\n", index); } if (val != PSU_STATUS_POWER_GOOD) { info->status |= ONLP_PSU_STATUS_FAILED; + return 0; } @@ -223,10 +260,14 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) psu_type = get_psu_type(index, info->model, sizeof(info->model)); switch (psu_type) { - case PSU_TYPE_AC_F2B: - case PSU_TYPE_AC_B2F: + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_COMPUWARE_B2F: ret = psu_cpr_4011_info_get(info); break; + case PSU_TYPE_AC_3YPOWER_F2B: + case PSU_TYPE_AC_3YPOWER_B2F: + ret = psu_ym2401_info_get(info); + break; case PSU_TYPE_DC_48V_F2B: case PSU_TYPE_DC_48V_B2F: ret = psu_um400d_info_get(info); diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py index a27d74e5..5158019d 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py @@ -9,6 +9,7 @@ class OnlPlatform_x86_64_accton_as6712_32x_r0(OnlPlatformAccton, def baseconfig(self): self.insmod('cpr_4011_4mxx') + self.insmod("ym2651y") for m in [ 'cpld', 'fan', 'psu', 'leds', 'sfp' ]: self.insmod("x86-64-accton-as6712-32x-%s.ko" % m) @@ -34,19 +35,17 @@ class OnlPlatform_x86_64_accton_as6712_32x_r0(OnlPlatformAccton, # initiate multiplexer (PCA9548) ('pca9548', 0x70, 1), - # initiate PSU-1 AC Power - ('as6712_32x_psu', 0x38, 35), + # initiate PSU-1 + ('as6712_32x_psu1', 0x38, 35), ('cpr_4011_4mxx', 0x3C, 35), + ('as6712_32x_psu1', 0x50, 35), + ('ym2401', 0x58, 35), - # initiate PSU-2 AC Power - ('as6712_32x_psu', 0x3b, 36), + # initiate PSU-2 + ('as6712_32x_psu2', 0x3b, 36), ('cpr_4011_4mxx', 0x3F, 36), - - # initiate PSU-1 DC Power - ('as6712_32x_psu', 0x50, 35), - - # initiate PSU-2 DC Power - ('as6712_32x_psu', 0x53, 36), + ('as6712_32x_psu2', 0x53, 36), + ('ym2401', 0x5b, 36), # initiate lm75 ('lm75', 0x48, 38), From ee1a53237df79957675cc3cfa627afa1e7905fdf Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Wed, 14 Jun 2017 14:54:49 +0800 Subject: [PATCH 20/31] [as6812-32x] Support DC power and YM2401J AC power --- .../builds/x86-64-accton-as6812-32x-psu.c | 172 +++++++++++++----- .../onlp/builds/src/module/src/fani.c | 108 ++++++++--- .../onlp/builds/src/module/src/platform_lib.c | 130 +++++++++++-- .../onlp/builds/src/module/src/platform_lib.h | 40 ++-- .../onlp/builds/src/module/src/psui.c | 82 ++++++++- .../platform-config/Makefile | 1 + .../x86_64_accton_as6812_32x_r0/__init__.py | 9 +- 7 files changed, 435 insertions(+), 107 deletions(-) create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/Makefile diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c index dfee68b1..ead60143 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c @@ -33,14 +33,22 @@ #include #include +#define PSU_STATUS_I2C_ADDR 0x60 +#define PSU_STATUS_I2C_REG_OFFSET 0x2 + +#define IS_POWER_GOOD(id, value) (!!(value & BIT(id*4 + 1))) +#define IS_PRESENT(id, value) (!(value & BIT(id*4))) + +static ssize_t show_index(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf); static int as6812_32x_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); extern int as6812_32x_i2c_cpld_read(unsigned short cpld_addr, u8 reg); +static int as6812_32x_psu_model_name_get(struct device *dev); /* Addresses scanned */ -static const unsigned short normal_i2c[] = { 0x50, 0x53, I2C_CLIENT_END }; +static const unsigned short normal_i2c[] = { I2C_CLIENT_END }; /* Each client has this additional data */ @@ -57,6 +65,7 @@ struct as6812_32x_psu_data { static struct as6812_32x_psu_data *as6812_32x_psu_update_device(struct device *dev); enum as6812_32x_psu_sysfs_attributes { + PSU_INDEX, PSU_PRESENT, PSU_MODEL_NAME, PSU_POWER_GOOD @@ -64,17 +73,28 @@ enum as6812_32x_psu_sysfs_attributes { /* sysfs attributes for hwmon */ +static SENSOR_DEVICE_ATTR(psu_index, S_IRUGO, show_index, NULL, PSU_INDEX); static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT); static SENSOR_DEVICE_ATTR(psu_model_name, S_IRUGO, show_model_name,NULL, PSU_MODEL_NAME); static SENSOR_DEVICE_ATTR(psu_power_good, S_IRUGO, show_status, NULL, PSU_POWER_GOOD); static struct attribute *as6812_32x_psu_attributes[] = { + &sensor_dev_attr_psu_index.dev_attr.attr, &sensor_dev_attr_psu_present.dev_attr.attr, &sensor_dev_attr_psu_model_name.dev_attr.attr, &sensor_dev_attr_psu_power_good.dev_attr.attr, NULL }; +static ssize_t show_index(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as6812_32x_psu_data *data = i2c_get_clientdata(client); + + return sprintf(buf, "%d\n", data->index); +} + static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf) { @@ -82,11 +102,15 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da, struct as6812_32x_psu_data *data = as6812_32x_psu_update_device(dev); u8 status = 0; + if (!data->valid) { + return sprintf(buf, "0\n"); + } + if (attr->index == PSU_PRESENT) { - status = !(data->status >> ((data->index-1)*4) & 0x1); + status = IS_PRESENT(data->index, data->status); } else { /* PSU_POWER_GOOD */ - status = data->status >> ((data->index-1)*4 + 1) & 0x1; + status = IS_POWER_GOOD(data->index, data->status); } return sprintf(buf, "%d\n", status); @@ -96,7 +120,18 @@ static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf) { struct as6812_32x_psu_data *data = as6812_32x_psu_update_device(dev); - + + if (!data->valid) { + return 0; + } + + if (!IS_PRESENT(data->index, data->status)) { + return 0; + } + + if (as6812_32x_psu_model_name_get(dev) < 0) { + return -ENXIO; + } return sprintf(buf, "%s\n", data->model_name); } @@ -123,6 +158,7 @@ static int as6812_32x_psu_probe(struct i2c_client *client, i2c_set_clientdata(client, data); data->valid = 0; + data->index = dev_id->driver_data; mutex_init(&data->update_lock); dev_info(&client->dev, "chip found\n"); @@ -139,14 +175,6 @@ static int as6812_32x_psu_probe(struct i2c_client *client, goto exit_remove; } - /* Update PSU index */ - if (client->addr == 0x50 || client->addr == 0x38) { - data->index = 1; - } - else if (client->addr == 0x53 || client->addr == 0x3b) { - data->index = 2; - } - dev_info(&client->dev, "%s: psu '%s'\n", dev_name(data->hwmon_dev), client->name); @@ -172,8 +200,15 @@ static int as6812_32x_psu_remove(struct i2c_client *client) return 0; } +enum psu_index +{ + as6812_32x_psu1, + as6812_32x_psu2 +}; + static const struct i2c_device_id as6812_32x_psu_id[] = { - { "as6812_32x_psu", 0 }, + { "as6812_32x_psu1", as6812_32x_psu1 }, + { "as6812_32x_psu2", as6812_32x_psu2 }, {} }; MODULE_DEVICE_TABLE(i2c, as6812_32x_psu_id); @@ -218,6 +253,76 @@ static int as6812_32x_psu_read_block(struct i2c_client *client, u8 command, u8 * return result; } +enum psu_type { + PSU_YM_2401_JCR, /* AC110V - F2B */ + PSU_YM_2401_JDR, /* AC110V - B2F */ + PSU_CPR_4011_4M11, /* AC110V - F2B */ + PSU_CPR_4011_4M21, /* AC110V - B2F */ + PSU_CPR_6011_2M11, /* AC110V - F2B */ + PSU_CPR_6011_2M21, /* AC110V - B2F */ + PSU_UM400D_01G, /* DC48V - F2B */ + PSU_UM400D01_01G /* DC48V - B2F */ +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + char* model_name; +}; + +struct model_name_info models[] = { +{PSU_YM_2401_JCR, 0x20, 11, "YM-2401JCR"}, +{PSU_YM_2401_JDR, 0x20, 11, "YM-2401JDR"}, +{PSU_CPR_4011_4M11, 0x26, 13, "CPR-4011-4M11"}, +{PSU_CPR_4011_4M21, 0x26, 13, "CPR-4011-4M21"}, +{PSU_CPR_6011_2M11, 0x26, 13, "CPR-6011-2M11"}, +{PSU_CPR_6011_2M21, 0x26, 13, "CPR-6011-2M21"}, +{PSU_UM400D_01G, 0x50, 9, "um400d01G"}, +{PSU_UM400D01_01G, 0x50, 12, "um400d01-01G"}, +}; + +static int as6812_32x_psu_model_name_get(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as6812_32x_psu_data *data = i2c_get_clientdata(client); + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data->model_name, 0, sizeof(data->model_name)); + + status = as6812_32x_psu_read_block(client, models[i].offset, + data->model_name, models[i].length); + if (status < 0) { + data->model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data->model_name[models[i].length] = '\0'; + } + + if (i == PSU_YM_2401_JCR || i == PSU_YM_2401_JDR) { + /* Skip the meaningless data byte 8*/ + data->model_name[8] = data->model_name[9]; + data->model_name[9] = data->model_name[10]; + data->model_name[10] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data->model_name, models[i].model_name, models[i].length) == 0) { + return 0; + } + else { + data->model_name[0] = '\0'; + } + } + + return -ENODATA; +} + static struct as6812_32x_psu_data *as6812_32x_psu_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); @@ -227,56 +332,27 @@ static struct as6812_32x_psu_data *as6812_32x_psu_update_device(struct device *d if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { - int status; - int present = 0; + int status = -1; dev_dbg(&client->dev, "Starting as6812_32x update\n"); + data->valid = 0; /* Read psu status */ - status = as6812_32x_i2c_cpld_read(0x60, 0x2); + status = as6812_32x_i2c_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET); if (status < 0) { - dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); + dev_dbg(&client->dev, "cpld reg (0x%x) err %d\n", PSU_STATUS_I2C_ADDR, status); + goto exit; } else { data->status = status; } - - /* Read model name */ - memset(data->model_name, 0, sizeof(data->model_name)); - present = !(data->status >> ((data->index-1)*4) & 0x1); - if (present) { - u8 command; - int model_name_len = 0; - - if (client->addr == 0x38 || client->addr == 0x3b) { - /* cpr_4011_4mxx AC power */ - command = 0x26; - model_name_len = 13; - } - else { /* 0x50 & 0x53 */ - /* ym2651 AC power */ - command = 0x20; - model_name_len = 8; - } - - status = as6812_32x_psu_read_block(client,command,data->model_name, - model_name_len); - - if (status < 0) { - data->model_name[0] = '\0'; - dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); - } - else { - data->model_name[model_name_len] = '\0'; - } - } - data->last_updated = jiffies; data->valid = 1; } +exit: mutex_unlock(&data->update_lock); return data; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/fani.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/fani.c index b08d45b4..2659e85a 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/fani.c @@ -24,14 +24,15 @@ * ***********************************************************/ #include -#include +#include +#include #include #include "platform_lib.h" #define PREFIX_PATH_ON_MAIN_BOARD "/sys/devices/platform/as6812_32x_fan/" #define PREFIX_PATH_ON_PSU "/sys/bus/i2c/devices/" -#define MAX_FAN_SPEED 25500 +#define MAX_FAN_SPEED 18000 /* use the smaller max_speed of the 2 fans in a fantray */ #define MAX_PSU_FAN_SPEED 19328 #define PROJECT_NAME @@ -92,7 +93,7 @@ static fan_path_T fan_path[] = /* must map with onlp_fan_id */ { \ { ONLP_FAN_ID_CREATE(FAN_##fan_id##_ON_PSU##psu_id), "Chassis PSU-"#psu_id " Fan "#fan_id, 0 }, \ 0x0, \ - (ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE), \ + 0, \ 0, \ 0, \ ONLP_FAN_MODE_INVALID, \ @@ -128,6 +129,22 @@ onlp_fan_info_t linfo[] = { if (close(fd) == -1) \ return ONLP_STATUS_E_INTERNAL +/* PSU relative marco */ +#define SET_PSU_TYPE_AC_F2B_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); \ + info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE + +#define SET_PSU_TYPE_AC_B2F_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); \ + info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE + +#define SET_PSU_TYPE_UM400D_F2B_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B) + +#define SET_PSU_TYPE_UM400D_B2F_FAN(info) \ + info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F) + + static int _onlp_fani_info_get_fan(int local_id, onlp_fan_info_t* info) { @@ -178,6 +195,22 @@ _onlp_fani_info_get_fan(int local_id, onlp_fan_info_t* info) return ONLP_STATUS_OK; } +static int +_onlp_fani_info_get_fan_on_psu_ym2401(int pid, onlp_fan_info_t* info) +{ + int val = 0; + + /* get fan status + */ + if (psu_ym2401_pmbus_info_get(pid, "psu_fan1_speed_rpm", &val) == ONLP_STATUS_OK) { + info->status |= (val > 0) ? 0 : ONLP_FAN_STATUS_FAILED; + info->rpm = val; + info->percentage = (info->rpm * 100) / 21600; + } + + return ONLP_STATUS_OK; +} + static int _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) { @@ -197,32 +230,48 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) switch (psu_type) { - case PSU_TYPE_AC_F2B: - info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_3YPOWER_F2B: + SET_PSU_TYPE_AC_F2B_FAN(info); break; - case PSU_TYPE_AC_B2F: - info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); + case PSU_TYPE_AC_COMPUWARE_B2F: + case PSU_TYPE_AC_3YPOWER_B2F: + SET_PSU_TYPE_AC_B2F_FAN(info); + break; + case PSU_TYPE_DC_48V_F2B: + SET_PSU_TYPE_UM400D_F2B_FAN(info); + break; + case PSU_TYPE_DC_48V_B2F: + SET_PSU_TYPE_UM400D_B2F_FAN(info); break; default: DEBUG_PRINT("[Debug][%s][%d][psu_type=%d]\n", __FUNCTION__, __LINE__, psu_type); break; } - /* get fan fault status - */ - sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].status); - OPEN_READ_FILE(fd,fullpath,r_data,nbytes,len); - if (atoi(r_data) > 0) - info->status |= ONLP_FAN_STATUS_FAILED; + if (psu_type == PSU_TYPE_AC_COMPUWARE_F2B || + psu_type == PSU_TYPE_AC_COMPUWARE_B2F ) + { + /* get fan fault status + */ + sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].status); + OPEN_READ_FILE(fd,fullpath,r_data,nbytes,len); + if (atoi(r_data) > 0) + info->status |= ONLP_FAN_STATUS_FAILED; + + /* get fan speed + */ + sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].speed); + OPEN_READ_FILE(fd,fullpath,r_data,nbytes,len); + info->rpm = atoi(r_data); - /* get fan speed - */ - sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].speed); - OPEN_READ_FILE(fd,fullpath,r_data,nbytes,len); - info->rpm = atoi(r_data); - - /* get speed percentage from rpm */ - info->percentage = (info->rpm * 100) / MAX_PSU_FAN_SPEED; - info->status |= ONLP_FAN_STATUS_PRESENT; + /* get speed percentage from rpm */ + info->percentage = (info->rpm * 100)/MAX_PSU_FAN_SPEED; + } + else if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) + { + return _onlp_fani_info_get_fan_on_psu_ym2401(psu_id, info); + } return ONLP_STATUS_OK; } @@ -310,8 +359,21 @@ onlp_fani_percentage_set(onlp_oid_t id, int p) { case FAN_1_ON_PSU1: case FAN_1_ON_PSU2: - sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].ctrl_speed); + { + int psu_id; + psu_type_t psu_type; + + psu_id = local_id - FAN_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + return psu_ym2401_pmbus_info_set(psu_id, "psu_fan1_duty_cycle_percentage", p); + } + + sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, fan_path[local_id].ctrl_speed); break; + } case FAN_1_ON_MAIN_BOARD: case FAN_2_ON_MAIN_BOARD: case FAN_3_ON_MAIN_BOARD: diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c index b8eadf4b..1591cddd 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c @@ -23,12 +23,13 @@ * * ***********************************************************/ -#include #include #include #include #include #include +#include +#include #include #include "platform_lib.h" @@ -66,7 +67,7 @@ int deviceNodeWriteInt(char *filename, int value, int data_len) char buf[8] = {0}; sprintf(buf, "%d", value); - return deviceNodeWrite(filename, buf, strlen(buf), data_len); + return deviceNodeWrite(filename, buf, sizeof(buf)-1, data_len); } int deviceNodeReadBinary(char *filename, char *buffer, int buf_size, int data_len) @@ -102,20 +103,25 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le { int ret; - if (data_len >= buf_size) { + if (data_len >= buf_size || data_len < 0) { return -1; } ret = deviceNodeReadBinary(filename, buffer, buf_size-1, data_len); if (ret == 0) { - buffer[buf_size-1] = '\0'; + if (data_len) { + buffer[data_len] = '\0'; + } + else { + buffer[buf_size-1] = '\0'; + } } - return ret; } #define I2C_PSU_MODEL_NAME_LEN 13 +#define STRLEN(x) (sizeof(x) - 1) psu_type_t get_psu_type(int id, char* modelname, int modelname_len) { @@ -123,22 +129,122 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) char model_name[I2C_PSU_MODEL_NAME_LEN + 1] = {0}; /* Check AC model name */ - node = (id == PSU1_ID) ? PSU1_AC_HWMON_NODE(psu_model_name) : PSU2_AC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_AC_EEPROM_NODE(psu_model_name) : PSU2_AC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "CPR-4011-4M11", strlen("CPR-4011-4M11")) == 0) { + if (strncmp(model_name, "CPR-4011-4M11", STRLEN("CPR-4011-4M11")) == 0) { if (modelname) { - strncpy(modelname, model_name, modelname_len-1); + strncpy(modelname, model_name, sizeof(model_name)); } - return PSU_TYPE_AC_F2B; + return PSU_TYPE_AC_COMPUWARE_F2B; } - else if (strncmp(model_name, "CPR-4011-4M21", strlen("CPR-4011-4M21")) == 0) { + else if (strncmp(model_name, "CPR-4011-4M21", STRLEN("CPR-4011-4M21")) == 0) { if (modelname) { - strncpy(modelname, model_name, modelname_len-1); + strncpy(modelname, model_name, sizeof(model_name)); } - return PSU_TYPE_AC_B2F; + return PSU_TYPE_AC_COMPUWARE_B2F; + } + else if (strncmp(model_name, "CPR-6011-2M11", STRLEN("CPR-6011-2M11")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_F2B; + } + else if (strncmp(model_name, "CPR-6011-2M21", STRLEN("CPR-6011-2M21")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_B2F; + } + } + + /* Check 3Y-Power AC model name */ + memset(model_name, 0, sizeof(model_name)); + node = (id == PSU1_ID) ? PSU1_AC_3YPOWER_EEPROM_NODE(psu_model_name) : PSU2_AC_3YPOWER_EEPROM_NODE(psu_model_name); + + if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { + if (strncmp(model_name, "YM-2401JCR", STRLEN("YM-2401JCR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JCR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_F2B; + } + else if (strncmp(model_name, "YM-2401JDR", STRLEN("YM-2401JDR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JDR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_B2F; + } + } + + /* Check DC model name */ + memset(model_name, 0, sizeof(model_name)); + node = (id == PSU1_ID) ? PSU1_DC_EEPROM_NODE(psu_model_name) : PSU2_DC_EEPROM_NODE(psu_model_name); + + if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { + if (strncmp(model_name, "um400d01G", STRLEN("um400d01G")) == 0) { + if (modelname) { + model_name[STRLEN("um400d01G")] = 0; + strncpy(modelname, model_name, 10); + } + return PSU_TYPE_DC_48V_B2F; + } + else if (strncmp(model_name, "um400d01-01G", STRLEN("um400d01-01G")) == 0) { + if (modelname) { + model_name[STRLEN("um400d01-01G")] = 0; + strncpy(modelname, model_name, 13); + } + return PSU_TYPE_DC_48V_F2B; } } return PSU_TYPE_UNKNOWN; } + +int psu_ym2401_pmbus_info_get(int id, char *node, int *value) +{ + int ret = 0; + char path[64] = {0}; + + *value = 0; + + if (PSU1_ID == id) { + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + } + else { + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + } + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ret; +} + +int psu_ym2401_pmbus_info_set(int id, char *node, int value) +{ + char path[64] = {0}; + + switch (id) { + case PSU1_ID: + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + break; + case PSU2_ID: + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + break; + default: + return ONLP_STATUS_E_UNSUPPORTED; + }; + + if (deviceNodeWriteInt(path, value, 0) < 0) { + AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h index 44edfb20..77a1aec4 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h @@ -36,17 +36,24 @@ #define PSU1_ID 1 #define PSU2_ID 2 -#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/35-003c/" -#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/36-003f/" +#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/35-003c/" /* Compuware psu */ +#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/36-003f/" /* Compuware psu */ +#define PSU1_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/35-0058/" /* 3YPower psu */ +#define PSU2_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/36-005b/" /* 3YPower psu */ -#define PSU1_AC_PMBUS_NODE(node) PSU1_AC_PMBUS_PREFIX#node -#define PSU2_AC_PMBUS_NODE(node) PSU2_AC_PMBUS_PREFIX#node +#define PSU1_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/35-0038/" +#define PSU1_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/35-0050/" +#define PSU2_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/36-003b/" +#define PSU2_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/36-0053/" +#define PSU1_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/35-0050/" +#define PSU2_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/36-0053/" -#define PSU1_AC_HWMON_PREFIX "/sys/bus/i2c/devices/35-0038/" -#define PSU2_AC_HWMON_PREFIX "/sys/bus/i2c/devices/36-003b/" - -#define PSU1_AC_HWMON_NODE(node) PSU1_AC_HWMON_PREFIX#node -#define PSU2_AC_HWMON_NODE(node) PSU2_AC_HWMON_PREFIX#node +#define PSU1_AC_EEPROM_NODE(node) PSU1_AC_EEPROM_PREFIX#node +#define PSU1_DC_EEPROM_NODE(node) PSU1_DC_EEPROM_PREFIX#node +#define PSU2_AC_EEPROM_NODE(node) PSU2_AC_EEPROM_PREFIX#node +#define PSU2_DC_EEPROM_NODE(node) PSU2_DC_EEPROM_PREFIX#node +#define PSU1_AC_3YPOWER_EEPROM_NODE(node) PSU1_AC_3YPOWER_EEPROM_PREFIX#node +#define PSU2_AC_3YPOWER_EEPROM_NODE(node) PSU2_AC_3YPOWER_EEPROM_PREFIX#node #define IDPROM_PATH "/sys/class/i2c-adapter/i2c-1/1-0057/eeprom" @@ -56,18 +63,25 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le typedef enum psu_type { PSU_TYPE_UNKNOWN, - PSU_TYPE_AC_F2B, - PSU_TYPE_AC_B2F + PSU_TYPE_AC_COMPUWARE_F2B, + PSU_TYPE_AC_COMPUWARE_B2F, + PSU_TYPE_AC_3YPOWER_F2B, + PSU_TYPE_AC_3YPOWER_B2F, + PSU_TYPE_DC_48V_F2B, + PSU_TYPE_DC_48V_B2F } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_ym2401_pmbus_info_get(int id, char *node, int *value); +int psu_ym2401_pmbus_info_set(int id, char *node, int value); #define DEBUG_MODE 0 #if (DEBUG_MODE == 1) - #define DEBUG_PRINT(format, ...) printf(format, __VA_ARGS__) + #define DEBUG_PRINT(fmt, args...) \ + printf("%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) #else - #define DEBUG_PRINT(format, ...) + #define DEBUG_PRINT(fmt, args...) #endif #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c index 66d83e62..cfaffbaf 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c @@ -24,7 +24,6 @@ * ***********************************************************/ #include -#include #include #include #include "platform_lib.h" @@ -43,7 +42,7 @@ } while(0) static int -psu_status_info_get(int id, char *node, int *value) +psu_status_info_get(int id, int is_ac, char *node, int *value) { int ret = 0; char buf[PSU_NODE_MAX_INT_LEN + 1] = {0}; @@ -52,12 +51,12 @@ psu_status_info_get(int id, char *node, int *value) *value = 0; if (PSU1_ID == id) { - sprintf(node_path, "%s%s", PSU1_AC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU1_AC_EEPROM_PREFIX : PSU1_DC_EEPROM_PREFIX, node); } else if (PSU2_ID == id) { - sprintf(node_path, "%s%s", PSU2_AC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU2_AC_EEPROM_PREFIX : PSU2_DC_EEPROM_PREFIX, node); } - + ret = deviceNodeReadString(node_path, buf, sizeof(buf), 0); if (ret == 0) { @@ -150,6 +149,62 @@ psu_cpr_4011_info_get(onlp_psu_info_t* info) return ONLP_STATUS_OK; } +int +psu_um400d_info_get(onlp_psu_info_t* info) +{ + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_DC48; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + + return ONLP_STATUS_OK; +} + +static int +psu_ym2401_info_get(onlp_psu_info_t* info) +{ + int val = 0; + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_AC; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT); + + /* Read voltage, current and power */ + if (psu_ym2401_pmbus_info_get(index, "psu_v_out", &val) == 0) { + info->mvout = val; + info->caps |= ONLP_PSU_CAPS_VOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_i_out", &val) == 0) { + info->miout = val; + info->caps |= ONLP_PSU_CAPS_IOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_p_out", &val) == 0) { + info->mpout = val; + info->caps |= ONLP_PSU_CAPS_POUT; + } + + return ONLP_STATUS_OK; +} + /* * Get all information about the given PSU oid. */ @@ -178,7 +233,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) *info = pinfo[index]; /* Set the onlp_oid_hdr_t */ /* Get the present state */ - if (psu_status_info_get(index, "psu_present", &val) != 0) { + if (psu_status_info_get(index, 1, "psu_present", &val) != 0) { printf("Unable to read PSU(%d) node(psu_present)\r\n", index); } @@ -190,12 +245,13 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) /* Get power good status */ - if (psu_status_info_get(index, "psu_power_good", &val) != 0) { + if (psu_status_info_get(index, 1, "psu_power_good", &val) != 0) { printf("Unable to read PSU(%d) node(psu_power_good)\r\n", index); } if (val != PSU_STATUS_POWER_GOOD) { info->status |= ONLP_PSU_STATUS_FAILED; + return 0; } @@ -204,10 +260,18 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) psu_type = get_psu_type(index, info->model, sizeof(info->model)); switch (psu_type) { - case PSU_TYPE_AC_F2B: - case PSU_TYPE_AC_B2F: + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_COMPUWARE_B2F: ret = psu_cpr_4011_info_get(info); break; + case PSU_TYPE_AC_3YPOWER_F2B: + case PSU_TYPE_AC_3YPOWER_B2F: + ret = psu_ym2401_info_get(info); + break; + case PSU_TYPE_DC_48V_F2B: + case PSU_TYPE_DC_48V_B2F: + ret = psu_um400d_info_get(info); + break; default: ret = ONLP_STATUS_E_UNSUPPORTED; break; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py index edc5c26a..66e8f002 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py @@ -9,6 +9,7 @@ class OnlPlatform_x86_64_accton_as6812_32x_r0(OnlPlatformAccton, def baseconfig(self): self.insmod('cpr_4011_4mxx') + self.insmod("ym2651y") for m in [ 'cpld', 'fan', 'psu', 'leds', 'sfp' ]: self.insmod("x86-64-accton-as6812-32x-%s.ko" % m) @@ -35,12 +36,16 @@ class OnlPlatform_x86_64_accton_as6812_32x_r0(OnlPlatformAccton, ('pca9548', 0x70, 1), # initiate PSU-1 - ('as6812_32x_psu', 0x38, 35), + ('as6812_32x_psu1', 0x38, 35), ('cpr_4011_4mxx', 0x3C, 35), + ('as6812_32x_psu1', 0x50, 35), + ('ym2401', 0x58, 35), # initiate PSU-2 - ('as6812_32x_psu', 0x3b, 36), + ('as6812_32x_psu2', 0x3b, 36), ('cpr_4011_4mxx', 0x3F, 36), + ('as6812_32x_psu2', 0x53, 36), + ('ym2401', 0x5b, 36), # initiate lm75 ('lm75', 0x48, 38), From 00bf5bff30048c24652030ba702e43bb90556368 Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Wed, 14 Jun 2017 14:56:24 +0800 Subject: [PATCH 21/31] [as6712-32x] add Makefile --- .../x86-64/x86-64-accton-as6712-32x/platform-config/Makefile | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/Makefile diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/Makefile b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/Makefile new file mode 100644 index 00000000..003238cf --- /dev/null +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/Makefile @@ -0,0 +1 @@ +include $(ONL)/make/pkg.mk \ No newline at end of file From 79462a4b08212281c5d905e15673738ffe022c05 Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Thu, 15 Jun 2017 17:46:51 +0800 Subject: [PATCH 22/31] [as6712-32x] Add thermal sensor for YM2401 PSU --- .../onlp/builds/src/module/src/thermali.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/thermali.c b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/thermali.c index 98d9a816..43f0ce84 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/thermali.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/module/src/thermali.c @@ -24,10 +24,8 @@ * ***********************************************************/ #include -#include #include #include -#include #include "platform_lib.h" #define VALIDATE(_id) \ @@ -112,6 +110,9 @@ int onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) { int local_id; + int psu_id; + psu_type_t psu_type; + VALIDATE(id); local_id = ONLP_OID_ID_GET(id); @@ -124,5 +125,13 @@ onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) return rv; } + psu_id = local_id - THERMAL_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + int rv = psu_ym2401_pmbus_info_get(psu_id, "psu_temp1_input", &info->mcelsius); + return rv; + } + return onlp_file_read_int(&info->mcelsius, devfiles[local_id]); } From a558d7576e3c6b4c38eed1411389104d73b90657 Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Thu, 15 Jun 2017 17:48:51 +0800 Subject: [PATCH 23/31] [as6812-32x] Add thermal sensor for YM2401 PSU --- .../onlp/builds/src/module/src/thermali.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/thermali.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/thermali.c index 98d9a816..43f0ce84 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/thermali.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/thermali.c @@ -24,10 +24,8 @@ * ***********************************************************/ #include -#include #include #include -#include #include "platform_lib.h" #define VALIDATE(_id) \ @@ -112,6 +110,9 @@ int onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) { int local_id; + int psu_id; + psu_type_t psu_type; + VALIDATE(id); local_id = ONLP_OID_ID_GET(id); @@ -124,5 +125,13 @@ onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) return rv; } + psu_id = local_id - THERMAL_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + int rv = psu_ym2401_pmbus_info_get(psu_id, "psu_temp1_input", &info->mcelsius); + return rv; + } + return onlp_file_read_int(&info->mcelsius, devfiles[local_id]); } From a8c284bf2596299fd72a1e7668e4e6beac1bcee9 Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Fri, 16 Jun 2017 14:01:43 +0800 Subject: [PATCH 24/31] [as5712-54x] Support DC power and YM2401J AC power --- .../builds/x86-64-accton-as5712-54x-psu.c | 147 ++++++++++++++---- .../onlp/builds/src/module/src/fani.c | 71 ++++++--- .../onlp/builds/src/module/src/platform_lib.c | 124 ++++++++++++--- .../onlp/builds/src/module/src/platform_lib.h | 46 ++++-- .../onlp/builds/src/module/src/psui.c | 51 +++++- .../onlp/builds/src/module/src/thermali.c | 15 +- .../x86_64_accton_as5712_54x_r0/__init__.py | 16 +- 7 files changed, 364 insertions(+), 106 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/modules/builds/x86-64-accton-as5712-54x-psu.c b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/modules/builds/x86-64-accton-as5712-54x-psu.c index 1e53140a..52269933 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/modules/builds/x86-64-accton-as5712-54x-psu.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/modules/builds/x86-64-accton-as5712-54x-psu.c @@ -1,6 +1,7 @@ /* * An hwmon driver for accton as5712_54x Power Module * + * Copyright (C) 2015 Accton Technology Corporation. * Copyright (C) Brandon Chuang * * Based on ad7414.c @@ -31,15 +32,23 @@ #include #include + +#define PSU_STATUS_I2C_ADDR 0x60 +#define PSU_STATUS_I2C_REG_OFFSET 0x2 + +#define IS_POWER_GOOD(id, value) (!!(value & BIT(id*4 + 1))) +#define IS_PRESENT(id, value) (!(value & BIT(id*4))) + static ssize_t show_index(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf); static int as5712_54x_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); extern int as5712_54x_i2c_cpld_read(unsigned short cpld_addr, u8 reg); +static int as5712_54x_psu_model_name_get(struct device *dev); /* Addresses scanned */ -static const unsigned short normal_i2c[] = { 0x38, 0x3b, 0x50, 0x53, I2C_CLIENT_END }; +static const unsigned short normal_i2c[] = { I2C_CLIENT_END }; /* Each client has this additional data */ @@ -93,11 +102,15 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da, struct as5712_54x_psu_data *data = as5712_54x_psu_update_device(dev); u8 status = 0; + if (!data->valid) { + return sprintf(buf, "0\n"); + } + if (attr->index == PSU_PRESENT) { - status = !(data->status >> ((data->index - 1) * 4) & 0x1); + status = IS_PRESENT(data->index, data->status); } else { /* PSU_POWER_GOOD */ - status = data->status >> ((data->index - 1) * 4 + 1) & 0x1; + status = IS_POWER_GOOD(data->index, data->status); } return sprintf(buf, "%d\n", status); @@ -108,7 +121,19 @@ static ssize_t show_model_name(struct device *dev, struct device_attribute *da, { struct as5712_54x_psu_data *data = as5712_54x_psu_update_device(dev); - return sprintf(buf, "%s", data->model_name); + if (!data->valid) { + return 0; + } + + if (!IS_PRESENT(data->index, data->status)) { + return 0; + } + + if (as5712_54x_psu_model_name_get(dev) < 0) { + return -ENXIO; + } + + return sprintf(buf, "%s\n", data->model_name); } static const struct attribute_group as5712_54x_psu_group = { @@ -134,6 +159,7 @@ static int as5712_54x_psu_probe(struct i2c_client *client, i2c_set_clientdata(client, data); data->valid = 0; + data->index = dev_id->driver_data; mutex_init(&data->update_lock); dev_info(&client->dev, "chip found\n"); @@ -150,14 +176,6 @@ static int as5712_54x_psu_probe(struct i2c_client *client, goto exit_remove; } - /* Update PSU index */ - if (client->addr == 0x38 || client->addr == 0x50) { - data->index = 1; - } - else if (client->addr == 0x3b || client->addr == 0x53) { - data->index = 2; - } - dev_info(&client->dev, "%s: psu '%s'\n", dev_name(data->hwmon_dev), client->name); @@ -183,8 +201,15 @@ static int as5712_54x_psu_remove(struct i2c_client *client) return 0; } +enum psu_index +{ + as5712_54x_psu1, + as5712_54x_psu2 +}; + static const struct i2c_device_id as5712_54x_psu_id[] = { - { "as5712_54x_psu", 0 }, + { "as5712_54x_psu1", as5712_54x_psu1 }, + { "as5712_54x_psu2", as5712_54x_psu2 }, {} }; MODULE_DEVICE_TABLE(i2c, as5712_54x_psu_id); @@ -218,6 +243,76 @@ abort: return result; } +enum psu_type { + PSU_YM_2401_JCR, /* AC110V - F2B */ + PSU_YM_2401_JDR, /* AC110V - B2F */ + PSU_CPR_4011_4M11, /* AC110V - F2B */ + PSU_CPR_4011_4M21, /* AC110V - B2F */ + PSU_CPR_6011_2M11, /* AC110V - F2B */ + PSU_CPR_6011_2M21, /* AC110V - B2F */ + PSU_UM400D_01G, /* DC48V - F2B */ + PSU_UM400D01_01G /* DC48V - B2F */ +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + char* model_name; +}; + +struct model_name_info models[] = { +{PSU_YM_2401_JCR, 0x20, 11, "YM-2401JCR"}, +{PSU_YM_2401_JDR, 0x20, 11, "YM-2401JDR"}, +{PSU_CPR_4011_4M11, 0x26, 13, "CPR-4011-4M11"}, +{PSU_CPR_4011_4M21, 0x26, 13, "CPR-4011-4M21"}, +{PSU_CPR_6011_2M11, 0x26, 13, "CPR-6011-2M11"}, +{PSU_CPR_6011_2M21, 0x26, 13, "CPR-6011-2M21"}, +{PSU_UM400D_01G, 0x50, 9, "um400d01G"}, +{PSU_UM400D01_01G, 0x50, 12, "um400d01-01G"}, +}; + +static int as5712_54x_psu_model_name_get(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as5712_54x_psu_data *data = i2c_get_clientdata(client); + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data->model_name, 0, sizeof(data->model_name)); + + status = as5712_54x_psu_read_block(client, models[i].offset, + data->model_name, models[i].length); + if (status < 0) { + data->model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data->model_name[models[i].length] = '\0'; + } + + if (i == PSU_YM_2401_JCR || i == PSU_YM_2401_JDR) { + /* Skip the meaningless data byte 8*/ + data->model_name[8] = data->model_name[9]; + data->model_name[9] = data->model_name[10]; + data->model_name[10] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data->model_name, models[i].model_name, models[i].length) == 0) { + return 0; + } + else { + data->model_name[0] = '\0'; + } + } + + return -ENODATA; +} + static struct as5712_54x_psu_data *as5712_54x_psu_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); @@ -230,32 +325,15 @@ static struct as5712_54x_psu_data *as5712_54x_psu_update_device(struct device *d int status = -1; dev_dbg(&client->dev, "Starting as5712_54x update\n"); + data->valid = 0; - /* Read model name */ - if (client->addr == 0x38 || client->addr == 0x3b) { - /* AC power */ - status = as5712_54x_psu_read_block(client, 0x26, data->model_name, - ARRAY_SIZE(data->model_name)-1); - } - else { - /* DC power */ - status = as5712_54x_psu_read_block(client, 0x50, data->model_name, - ARRAY_SIZE(data->model_name)-1); - } - - if (status < 0) { - data->model_name[0] = '\0'; - dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); - } - else { - data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; - } /* Read psu status */ - status = as5712_54x_i2c_cpld_read(0x60, 0x2); + status = as5712_54x_i2c_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET); if (status < 0) { - dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); + dev_dbg(&client->dev, "cpld reg (0x%x) err %d\n", PSU_STATUS_I2C_ADDR, status); + goto exit; } else { data->status = status; @@ -265,6 +343,7 @@ static struct as5712_54x_psu_data *as5712_54x_psu_update_device(struct device *d data->valid = 1; } +exit: mutex_unlock(&data->update_lock); return data; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/fani.c b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/fani.c index 47a53016..2715c75b 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/fani.c @@ -24,7 +24,8 @@ * ***********************************************************/ #include -#include +#include +#include #include #include "platform_lib.h" @@ -135,11 +136,11 @@ onlp_fan_info_t linfo[] = { /* PSU relative marco */ -#define SET_PSU_TYPE_CPR_4011_F2B_FAN(info) \ +#define SET_PSU_TYPE_AC_F2B_FAN(info) \ info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); \ info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE -#define SET_PSU_TYPE_CPR_4011_B2F_FAN(info) \ +#define SET_PSU_TYPE_AC_B2F_FAN(info) \ info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); \ info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE @@ -199,10 +200,26 @@ _onlp_fani_info_get_fan(int local_id, onlp_fan_info_t* info) return ONLP_STATUS_OK; } +static int +_onlp_fani_info_get_fan_on_psu_ym2401(int pid, onlp_fan_info_t* info) +{ + int val = 0; + + /* get fan status + */ + if (psu_ym2401_pmbus_info_get(pid, "psu_fan1_speed_rpm", &val) == ONLP_STATUS_OK) { + info->status |= (val > 0) ? 0 : ONLP_FAN_STATUS_FAILED; + info->rpm = val; + info->percentage = (info->rpm * 100) / 21600; + } + + return ONLP_STATUS_OK; +} + static int _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) { - int psu_id, is_ac=0; + int psu_id; int fd, len, nbytes = 10; char r_data[10] = {0}; char fullpath[50] = {0}; @@ -211,24 +228,19 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) /* get fan other cap status according to psu type */ psu_id = (local_id-FAN_1_ON_PSU1) + 1; - - if (LOCAL_DEBUG) - printf("[Debug][%s][%d][psu_id: %d]\n", __FUNCTION__, __LINE__, psu_id); + DEBUG_PRINT("[psu_id: %d]", psu_id); psu_type = get_psu_type(psu_id, NULL, 0); /* psu_id = 1 , present PSU1. pus_id =2 , present PSU2 */ - - if (LOCAL_DEBUG) - printf("[Debug][%s][%d][psu_type: %d]\n", __FUNCTION__, __LINE__, psu_type); - + DEBUG_PRINT("[psu_type: %d]", psu_type); switch (psu_type) { - case PSU_TYPE_AC_F2B: - SET_PSU_TYPE_CPR_4011_F2B_FAN(info); - is_ac = 1; + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_3YPOWER_F2B: + SET_PSU_TYPE_AC_F2B_FAN(info); break; - case PSU_TYPE_AC_B2F: - SET_PSU_TYPE_CPR_4011_B2F_FAN(info); - is_ac = 1; + case PSU_TYPE_AC_COMPUWARE_B2F: + case PSU_TYPE_AC_3YPOWER_B2F: + SET_PSU_TYPE_AC_B2F_FAN(info); break; case PSU_TYPE_DC_48V_F2B: SET_PSU_TYPE_UM400D_F2B_FAN(info); @@ -243,7 +255,8 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) break; } - if (1 == is_ac) + if (psu_type == PSU_TYPE_AC_COMPUWARE_F2B || + psu_type == PSU_TYPE_AC_COMPUWARE_B2F ) { /* get fan fault status */ @@ -259,8 +272,12 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) info->rpm = atoi(r_data); /* get speed percentage from rpm */ - info->percentage = (info->rpm * 100)/19328; - + info->percentage = (info->rpm * 100)/19328; + } + else if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) + { + return _onlp_fani_info_get_fan_on_psu_ym2401(psu_id, info); } return ONLP_STATUS_OK; @@ -351,8 +368,22 @@ onlp_fani_percentage_set(onlp_oid_t id, int p) { case FAN_1_ON_PSU1: case FAN_1_ON_PSU2: + { + int psu_id; + psu_type_t psu_type; + + psu_id = local_id - FAN_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + return psu_ym2401_pmbus_info_set(psu_id, "psu_fan1_duty_cycle_percentage", p); + } + sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, last_path[local_id].ctrl_speed); break; + } + default: sprintf(fullpath, "%s%s", PREFIX_PATH_ON_MAIN_BOARD, last_path[local_id].ctrl_speed); break; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.c index a6c114be..8055f9c4 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.c @@ -23,12 +23,13 @@ * * ***********************************************************/ -#include #include #include #include #include #include +#include +#include #include #include "platform_lib.h" @@ -121,6 +122,7 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le } #define I2C_PSU_MODEL_NAME_LEN 13 +#define STRLEN(x) (sizeof(x) - 1) psu_type_t get_psu_type(int id, char* modelname, int modelname_len) { @@ -128,38 +130,73 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) char model_name[I2C_PSU_MODEL_NAME_LEN + 1] = {0}; /* Check AC model name */ - node = (id == PSU1_ID) ? PSU1_AC_HWMON_NODE(psu_model_name) : PSU2_AC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_AC_EEPROM_NODE(psu_model_name) : PSU2_AC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "CPR-4011-4M11", strlen("CPR-4011-4M11")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } - return PSU_TYPE_AC_F2B; + if (strncmp(model_name, "CPR-4011-4M11", STRLEN("CPR-4011-4M11")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_F2B; } - else if (strncmp(model_name, "CPR-4011-4M21", strlen("CPR-4011-4M21")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } - return PSU_TYPE_AC_B2F; + else if (strncmp(model_name, "CPR-4011-4M21", STRLEN("CPR-4011-4M21")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_B2F; + } + else if (strncmp(model_name, "CPR-6011-2M11", STRLEN("CPR-6011-2M11")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_F2B; + } + else if (strncmp(model_name, "CPR-6011-2M21", STRLEN("CPR-6011-2M21")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_B2F; + } + } + + /* Check 3Y-Power AC model name */ + memset(model_name, 0, sizeof(model_name)); + node = (id == PSU1_ID) ? PSU1_AC_3YPOWER_EEPROM_NODE(psu_model_name) : PSU2_AC_3YPOWER_EEPROM_NODE(psu_model_name); + + if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { + if (strncmp(model_name, "YM-2401JCR", STRLEN("YM-2401JCR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JCR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_F2B; + } + else if (strncmp(model_name, "YM-2401JDR", STRLEN("YM-2401JDR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JDR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_B2F; } } /* Check DC model name */ memset(model_name, 0, sizeof(model_name)); - node = (id == PSU1_ID) ? PSU1_DC_HWMON_NODE(psu_model_name) : PSU2_DC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_DC_EEPROM_NODE(psu_model_name) : PSU2_DC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "um400d01G", strlen("um400d01G")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } + if (strncmp(model_name, "um400d01G", STRLEN("um400d01G")) == 0) { + if (modelname) { + model_name[STRLEN("um400d01G")] = 0; + strncpy(modelname, model_name, 10); + } return PSU_TYPE_DC_48V_B2F; } - else if (strncmp(model_name, "um400d01-01G", strlen("um400d01-01G")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } + else if (strncmp(model_name, "um400d01-01G", STRLEN("um400d01-01G")) == 0) { + if (modelname) { + model_name[STRLEN("um400d01-01G")] = 0; + strncpy(modelname, model_name, 13); + } return PSU_TYPE_DC_48V_F2B; } } @@ -167,3 +204,48 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) return PSU_TYPE_UNKNOWN; } +int psu_ym2401_pmbus_info_get(int id, char *node, int *value) +{ + int ret = 0; + char path[64] = {0}; + + *value = 0; + + if (PSU1_ID == id) { + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + } + else { + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + } + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ret; +} + +int psu_ym2401_pmbus_info_set(int id, char *node, int value) +{ + char path[64] = {0}; + + switch (id) { + case PSU1_ID: + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + break; + case PSU2_ID: + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + break; + default: + return ONLP_STATUS_E_UNSUPPORTED; + }; + + if (deviceNodeWriteInt(path, value, 0) < 0) { + AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.h index 62ded75d..7deea10f 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/platform_lib.h @@ -35,21 +35,24 @@ #define CHASSIS_THERMAL_COUNT 4 #define CHASSIS_LED_COUNT 10 -#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/57-003c/" -#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/58-003f/" +#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/57-003c/" /* Compuware psu */ +#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/58-003f/" /* Compuware psu */ +#define PSU1_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/57-0058/" /* 3YPower psu */ +#define PSU2_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/58-005b/" /* 3YPower psu */ -#define PSU1_AC_HWMON_PREFIX "/sys/bus/i2c/devices/57-0038/" -#define PSU1_DC_HWMON_PREFIX "/sys/bus/i2c/devices/57-0050/" -#define PSU2_AC_HWMON_PREFIX "/sys/bus/i2c/devices/58-003b/" -#define PSU2_DC_HWMON_PREFIX "/sys/bus/i2c/devices/58-0053/" +#define PSU1_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/57-0038/" +#define PSU1_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/57-0050/" +#define PSU2_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/58-003b/" +#define PSU2_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/58-0053/" +#define PSU1_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/57-0050/" +#define PSU2_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/58-0053/" -#define PSU1_AC_HWMON_NODE(node) PSU1_AC_HWMON_PREFIX#node -#define PSU1_DC_HWMON_NODE(node) PSU1_DC_HWMON_PREFIX#node -#define PSU2_AC_HWMON_NODE(node) PSU2_AC_HWMON_PREFIX#node -#define PSU2_DC_HWMON_NODE(node) PSU2_DC_HWMON_PREFIX#node - -//#define SFP_HWMON_PREFIX "/sys/bus/i2c/devices/3-0050/" -//#define SFP_HWMON_NODE(node) SFP_HWMON_PREFIX#node +#define PSU1_AC_EEPROM_NODE(node) PSU1_AC_EEPROM_PREFIX#node +#define PSU1_DC_EEPROM_NODE(node) PSU1_DC_EEPROM_PREFIX#node +#define PSU2_AC_EEPROM_NODE(node) PSU2_AC_EEPROM_PREFIX#node +#define PSU2_DC_EEPROM_NODE(node) PSU2_DC_EEPROM_PREFIX#node +#define PSU1_AC_3YPOWER_EEPROM_NODE(node) PSU1_AC_3YPOWER_EEPROM_PREFIX#node +#define PSU2_AC_3YPOWER_EEPROM_NODE(node) PSU2_AC_3YPOWER_EEPROM_PREFIX#node #define IDPROM_PATH "/sys/devices/pci0000:00/0000:00:13.0/i2c-1/1-0057/eeprom" @@ -59,12 +62,25 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le typedef enum psu_type { PSU_TYPE_UNKNOWN, - PSU_TYPE_AC_F2B, - PSU_TYPE_AC_B2F, + PSU_TYPE_AC_COMPUWARE_F2B, + PSU_TYPE_AC_COMPUWARE_B2F, + PSU_TYPE_AC_3YPOWER_F2B, + PSU_TYPE_AC_3YPOWER_B2F, PSU_TYPE_DC_48V_F2B, PSU_TYPE_DC_48V_B2F } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_ym2401_pmbus_info_get(int id, char *node, int *value); +int psu_ym2401_pmbus_info_set(int id, char *node, int value); + +#define DEBUG_MODE 0 + +#if (DEBUG_MODE == 1) + #define DEBUG_PRINT(fmt, args...) \ + printf("%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) +#else + #define DEBUG_PRINT(fmt, args...) +#endif #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/psui.c index 73b04a21..901c8855 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/psui.c @@ -24,7 +24,6 @@ * ***********************************************************/ #include -#include #include #include #include "platform_lib.h" @@ -52,10 +51,10 @@ psu_status_info_get(int id, int is_ac, char *node, int *value) *value = 0; if (PSU1_ID == id) { - sprintf(node_path, "%s%s", is_ac ? PSU1_AC_HWMON_PREFIX : PSU1_DC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU1_AC_EEPROM_PREFIX : PSU1_DC_EEPROM_PREFIX, node); } else if (PSU2_ID == id) { - sprintf(node_path, "%s%s", is_ac ? PSU2_AC_HWMON_PREFIX : PSU2_DC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU2_AC_EEPROM_PREFIX : PSU2_DC_EEPROM_PREFIX, node); } ret = deviceNodeReadString(node_path, buf, sizeof(buf), 0); @@ -169,6 +168,43 @@ psu_um400d_info_get(onlp_psu_info_t* info) return ONLP_STATUS_OK; } +static int +psu_ym2401_info_get(onlp_psu_info_t* info) +{ + int val = 0; + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_AC; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT); + + /* Read voltage, current and power */ + if (psu_ym2401_pmbus_info_get(index, "psu_v_out", &val) == 0) { + info->mvout = val; + info->caps |= ONLP_PSU_CAPS_VOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_i_out", &val) == 0) { + info->miout = val; + info->caps |= ONLP_PSU_CAPS_IOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_p_out", &val) == 0) { + info->mpout = val; + info->caps |= ONLP_PSU_CAPS_POUT; + } + + return ONLP_STATUS_OK; +} + /* * Get all information about the given PSU oid. */ @@ -215,6 +251,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) if (val != PSU_STATUS_POWER_GOOD) { info->status |= ONLP_PSU_STATUS_FAILED; + return 0; } @@ -223,10 +260,14 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) psu_type = get_psu_type(index, info->model, sizeof(info->model)); switch (psu_type) { - case PSU_TYPE_AC_F2B: - case PSU_TYPE_AC_B2F: + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_COMPUWARE_B2F: ret = psu_cpr_4011_info_get(info); break; + case PSU_TYPE_AC_3YPOWER_F2B: + case PSU_TYPE_AC_3YPOWER_B2F: + ret = psu_ym2401_info_get(info); + break; case PSU_TYPE_DC_48V_F2B: case PSU_TYPE_DC_48V_B2F: ret = psu_um400d_info_get(info); diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/thermali.c b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/thermali.c index 425f348e..bb4e7fc6 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/thermali.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/module/src/thermali.c @@ -24,10 +24,10 @@ * ***********************************************************/ #include -#include #include #include -#include +#include "platform_lib.h" + #define VALIDATE(_id) \ do { \ @@ -122,6 +122,9 @@ int onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) { int local_id; + int psu_id; + psu_type_t psu_type; + VALIDATE(id); local_id = ONLP_OID_ID_GET(id); @@ -134,5 +137,13 @@ onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) return rv; } + psu_id = local_id - THERMAL_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + int rv = psu_ym2401_pmbus_info_get(psu_id, "psu_temp1_input", &info->mcelsius); + return rv; + } + return onlp_file_read_int(&info->mcelsius, devfiles[local_id]); } diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py index f5999753..3b32120d 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py @@ -10,6 +10,7 @@ class OnlPlatform_x86_64_accton_as5712_54x_r0(OnlPlatformAccton, def baseconfig(self): self.insmod('cpr_4011_4mxx') + self.insmod("ym2651y") for m in [ 'cpld', 'fan', 'psu', 'leds', 'sfp' ]: self.insmod("x86-64-accton-as5712-54x-%s.ko" % m) @@ -42,19 +43,16 @@ class OnlPlatform_x86_64_accton_as5712_54x_r0(OnlPlatformAccton, ('pca9548', 0x70, 1), # initiate PSU-1 AC Power - ('as5712_54x_psu', 0x38, 57), + ('as5712_54x_psu1', 0x38, 57), ('cpr_4011_4mxx', 0x3c, 57), + ('as5712_54x_psu1', 0x50, 57), + ('ym2401', 0x58, 57), # initiate PSU-2 AC Power - ('as5712_54x_psu', 0x3b, 58), + ('as5712_54x_psu2', 0x3b, 58), ('cpr_4011_4mxx', 0x3f, 58), - - # initiate PSU-1 DC Power - ('as5712_54x_psu', 0x50, 57), - - # initiate PSU-2 DC Power - ('as5712_54x_psu', 0x53, 58), - + ('as5712_54x_psu2', 0x53, 58), + ('ym2401', 0x5b, 58), # initiate lm75 ('lm75', 0x48, 61), From 80975cd4fc9182921d1a31c8d14ad0ec6a9a5591 Mon Sep 17 00:00:00 2001 From: brandonchuang Date: Fri, 16 Jun 2017 14:03:57 +0800 Subject: [PATCH 25/31] [as5812-54x] Support DC power and YM2401J AC power --- .../builds/x86-64-accton-as5812-54x-psu.c | 146 ++++++++++++++---- .../onlp/builds/src/module/src/fani.c | 71 ++++++--- .../onlp/builds/src/module/src/platform_lib.c | 124 ++++++++++++--- .../onlp/builds/src/module/src/platform_lib.h | 46 ++++-- .../onlp/builds/src/module/src/psui.c | 51 +++++- .../onlp/builds/src/module/src/thermali.c | 14 +- .../x86_64_accton_as5812_54x_r0/__init__.py | 9 +- 7 files changed, 362 insertions(+), 99 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/modules/builds/x86-64-accton-as5812-54x-psu.c b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/modules/builds/x86-64-accton-as5812-54x-psu.c index 0d299807..d4c44779 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/modules/builds/x86-64-accton-as5812-54x-psu.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/modules/builds/x86-64-accton-as5812-54x-psu.c @@ -32,15 +32,23 @@ #include #include + +#define PSU_STATUS_I2C_ADDR 0x60 +#define PSU_STATUS_I2C_REG_OFFSET 0x2 + +#define IS_POWER_GOOD(id, value) (!!(value & BIT(id*4 + 1))) +#define IS_PRESENT(id, value) (!(value & BIT(id*4))) + static ssize_t show_index(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf); static int as5812_54x_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); extern int as5812_54x_i2c_cpld_read(unsigned short cpld_addr, u8 reg); +static int as5812_54x_psu_model_name_get(struct device *dev); /* Addresses scanned */ -static const unsigned short normal_i2c[] = { 0x38, 0x3b, 0x50, 0x53, I2C_CLIENT_END }; +static const unsigned short normal_i2c[] = { I2C_CLIENT_END }; /* Each client has this additional data */ @@ -94,11 +102,15 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da, struct as5812_54x_psu_data *data = as5812_54x_psu_update_device(dev); u8 status = 0; + if (!data->valid) { + return sprintf(buf, "0\n"); + } + if (attr->index == PSU_PRESENT) { - status = !(data->status >> ((data->index - 1) * 4) & 0x1); + status = IS_PRESENT(data->index, data->status); } else { /* PSU_POWER_GOOD */ - status = data->status >> ((data->index - 1) * 4 + 1) & 0x1; + status = IS_POWER_GOOD(data->index, data->status); } return sprintf(buf, "%d\n", status); @@ -109,7 +121,19 @@ static ssize_t show_model_name(struct device *dev, struct device_attribute *da, { struct as5812_54x_psu_data *data = as5812_54x_psu_update_device(dev); - return sprintf(buf, "%s", data->model_name); + if (!data->valid) { + return 0; + } + + if (!IS_PRESENT(data->index, data->status)) { + return 0; + } + + if (as5812_54x_psu_model_name_get(dev) < 0) { + return -ENXIO; + } + + return sprintf(buf, "%s\n", data->model_name); } static const struct attribute_group as5812_54x_psu_group = { @@ -135,6 +159,7 @@ static int as5812_54x_psu_probe(struct i2c_client *client, i2c_set_clientdata(client, data); data->valid = 0; + data->index = dev_id->driver_data; mutex_init(&data->update_lock); dev_info(&client->dev, "chip found\n"); @@ -151,14 +176,6 @@ static int as5812_54x_psu_probe(struct i2c_client *client, goto exit_remove; } - /* Update PSU index */ - if (client->addr == 0x38 || client->addr == 0x50) { - data->index = 1; - } - else if (client->addr == 0x3b || client->addr == 0x53) { - data->index = 2; - } - dev_info(&client->dev, "%s: psu '%s'\n", dev_name(data->hwmon_dev), client->name); @@ -184,8 +201,15 @@ static int as5812_54x_psu_remove(struct i2c_client *client) return 0; } +enum psu_index +{ + as5812_54x_psu1, + as5812_54x_psu2 +}; + static const struct i2c_device_id as5812_54x_psu_id[] = { - { "as5812_54x_psu", 0 }, + { "as5812_54x_psu1", as5812_54x_psu1 }, + { "as5812_54x_psu2", as5812_54x_psu2 }, {} }; MODULE_DEVICE_TABLE(i2c, as5812_54x_psu_id); @@ -219,6 +243,76 @@ abort: return result; } +enum psu_type { + PSU_YM_2401_JCR, /* AC110V - F2B */ + PSU_YM_2401_JDR, /* AC110V - B2F */ + PSU_CPR_4011_4M11, /* AC110V - F2B */ + PSU_CPR_4011_4M21, /* AC110V - B2F */ + PSU_CPR_6011_2M11, /* AC110V - F2B */ + PSU_CPR_6011_2M21, /* AC110V - B2F */ + PSU_UM400D_01G, /* DC48V - F2B */ + PSU_UM400D01_01G /* DC48V - B2F */ +}; + +struct model_name_info { + enum psu_type type; + u8 offset; + u8 length; + char* model_name; +}; + +struct model_name_info models[] = { +{PSU_YM_2401_JCR, 0x20, 11, "YM-2401JCR"}, +{PSU_YM_2401_JDR, 0x20, 11, "YM-2401JDR"}, +{PSU_CPR_4011_4M11, 0x26, 13, "CPR-4011-4M11"}, +{PSU_CPR_4011_4M21, 0x26, 13, "CPR-4011-4M21"}, +{PSU_CPR_6011_2M11, 0x26, 13, "CPR-6011-2M11"}, +{PSU_CPR_6011_2M21, 0x26, 13, "CPR-6011-2M21"}, +{PSU_UM400D_01G, 0x50, 9, "um400d01G"}, +{PSU_UM400D01_01G, 0x50, 12, "um400d01-01G"}, +}; + +static int as5812_54x_psu_model_name_get(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as5812_54x_psu_data *data = i2c_get_clientdata(client); + int i, status; + + for (i = 0; i < ARRAY_SIZE(models); i++) { + memset(data->model_name, 0, sizeof(data->model_name)); + + status = as5812_54x_psu_read_block(client, models[i].offset, + data->model_name, models[i].length); + if (status < 0) { + data->model_name[0] = '\0'; + dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x%x)\n", + client->addr, models[i].offset); + return status; + } + else { + data->model_name[models[i].length] = '\0'; + } + + if (i == PSU_YM_2401_JCR || i == PSU_YM_2401_JDR) { + /* Skip the meaningless data byte 8*/ + data->model_name[8] = data->model_name[9]; + data->model_name[9] = data->model_name[10]; + data->model_name[10] = '\0'; + } + + /* Determine if the model name is known, if not, read next index + */ + if (strncmp(data->model_name, models[i].model_name, models[i].length) == 0) { + return 0; + } + else { + data->model_name[0] = '\0'; + } + } + + return -ENODATA; +} + static struct as5812_54x_psu_data *as5812_54x_psu_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); @@ -231,32 +325,15 @@ static struct as5812_54x_psu_data *as5812_54x_psu_update_device(struct device *d int status = -1; dev_dbg(&client->dev, "Starting as5812_54x update\n"); + data->valid = 0; - /* Read model name */ - if (client->addr == 0x38 || client->addr == 0x3b) { - /* AC power */ - status = as5812_54x_psu_read_block(client, 0x26, data->model_name, - ARRAY_SIZE(data->model_name)-1); - } - else { - /* DC power */ - status = as5812_54x_psu_read_block(client, 0x50, data->model_name, - ARRAY_SIZE(data->model_name)-1); - } - - if (status < 0) { - data->model_name[0] = '\0'; - dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); - } - else { - data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; - } /* Read psu status */ - status = as5812_54x_i2c_cpld_read(0x60, 0x2); + status = as5812_54x_i2c_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET); if (status < 0) { - dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); + dev_dbg(&client->dev, "cpld reg (0x%x) err %d\n", PSU_STATUS_I2C_ADDR, status); + goto exit; } else { data->status = status; @@ -266,6 +343,7 @@ static struct as5812_54x_psu_data *as5812_54x_psu_update_device(struct device *d data->valid = 1; } +exit: mutex_unlock(&data->update_lock); return data; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/fani.c b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/fani.c index fa1e588e..4e76e24c 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/fani.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/fani.c @@ -24,7 +24,8 @@ * ***********************************************************/ #include -#include +#include +#include #include #include "platform_lib.h" @@ -135,11 +136,11 @@ onlp_fan_info_t linfo[] = { /* PSU relative marco */ -#define SET_PSU_TYPE_CPR_4011_F2B_FAN(info) \ +#define SET_PSU_TYPE_AC_F2B_FAN(info) \ info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_F2B); \ info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE -#define SET_PSU_TYPE_CPR_4011_B2F_FAN(info) \ +#define SET_PSU_TYPE_AC_B2F_FAN(info) \ info->status |= (ONLP_FAN_STATUS_PRESENT | ONLP_FAN_STATUS_B2F); \ info->caps |= ONLP_FAN_CAPS_SET_PERCENTAGE | ONLP_FAN_CAPS_GET_RPM | ONLP_FAN_CAPS_GET_PERCENTAGE @@ -199,10 +200,26 @@ _onlp_fani_info_get_fan(int local_id, onlp_fan_info_t* info) return ONLP_STATUS_OK; } +static int +_onlp_fani_info_get_fan_on_psu_ym2401(int pid, onlp_fan_info_t* info) +{ + int val = 0; + + /* get fan status + */ + if (psu_ym2401_pmbus_info_get(pid, "psu_fan1_speed_rpm", &val) == ONLP_STATUS_OK) { + info->status |= (val > 0) ? 0 : ONLP_FAN_STATUS_FAILED; + info->rpm = val; + info->percentage = (info->rpm * 100) / 21600; + } + + return ONLP_STATUS_OK; +} + static int _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) { - int psu_id, is_ac=0; + int psu_id; int fd, len, nbytes = 10; char r_data[10] = {0}; char fullpath[50] = {0}; @@ -211,24 +228,19 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) /* get fan other cap status according to psu type */ psu_id = (local_id-FAN_1_ON_PSU1) + 1; - - if (LOCAL_DEBUG) - printf("[Debug][%s][%d][psu_id: %d]\n", __FUNCTION__, __LINE__, psu_id); + DEBUG_PRINT("[psu_id: %d]", psu_id); psu_type = get_psu_type(psu_id, NULL, 0); /* psu_id = 1 , present PSU1. pus_id =2 , present PSU2 */ - - if (LOCAL_DEBUG) - printf("[Debug][%s][%d][psu_type: %d]\n", __FUNCTION__, __LINE__, psu_type); - + DEBUG_PRINT("[psu_type: %d]", psu_type); switch (psu_type) { - case PSU_TYPE_AC_F2B: - SET_PSU_TYPE_CPR_4011_F2B_FAN(info); - is_ac = 1; + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_3YPOWER_F2B: + SET_PSU_TYPE_AC_F2B_FAN(info); break; - case PSU_TYPE_AC_B2F: - SET_PSU_TYPE_CPR_4011_B2F_FAN(info); - is_ac = 1; + case PSU_TYPE_AC_COMPUWARE_B2F: + case PSU_TYPE_AC_3YPOWER_B2F: + SET_PSU_TYPE_AC_B2F_FAN(info); break; case PSU_TYPE_DC_48V_F2B: SET_PSU_TYPE_UM400D_F2B_FAN(info); @@ -243,7 +255,8 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) break; } - if (1 == is_ac) + if (psu_type == PSU_TYPE_AC_COMPUWARE_F2B || + psu_type == PSU_TYPE_AC_COMPUWARE_B2F ) { /* get fan fault status */ @@ -259,8 +272,12 @@ _onlp_fani_info_get_fan_on_psu(int local_id, onlp_fan_info_t* info) info->rpm = atoi(r_data); /* get speed percentage from rpm */ - info->percentage = (info->rpm * 100)/19328; - + info->percentage = (info->rpm * 100)/19328; + } + else if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) + { + return _onlp_fani_info_get_fan_on_psu_ym2401(psu_id, info); } return ONLP_STATUS_OK; @@ -351,8 +368,22 @@ onlp_fani_percentage_set(onlp_oid_t id, int p) { case FAN_1_ON_PSU1: case FAN_1_ON_PSU2: + { + int psu_id; + psu_type_t psu_type; + + psu_id = local_id - FAN_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || + psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + return psu_ym2401_pmbus_info_set(psu_id, "psu_fan1_duty_cycle_percentage", p); + } + sprintf(fullpath, "%s%s", PREFIX_PATH_ON_PSU, last_path[local_id].ctrl_speed); break; + } + default: sprintf(fullpath, "%s%s", PREFIX_PATH_ON_MAIN_BOARD, last_path[local_id].ctrl_speed); break; diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.c index 7c28f95b..75526b5f 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.c @@ -23,12 +23,13 @@ * * ***********************************************************/ -#include #include #include #include #include #include +#include +#include #include #include "platform_lib.h" @@ -121,6 +122,7 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le } #define I2C_PSU_MODEL_NAME_LEN 13 +#define STRLEN(x) (sizeof(x) - 1) psu_type_t get_psu_type(int id, char* modelname, int modelname_len) { @@ -128,38 +130,73 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) char model_name[I2C_PSU_MODEL_NAME_LEN + 1] = {0}; /* Check AC model name */ - node = (id == PSU1_ID) ? PSU1_AC_HWMON_NODE(psu_model_name) : PSU2_AC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_AC_EEPROM_NODE(psu_model_name) : PSU2_AC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "CPR-4011-4M11", strlen("CPR-4011-4M11")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } - return PSU_TYPE_AC_F2B; + if (strncmp(model_name, "CPR-4011-4M11", STRLEN("CPR-4011-4M11")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_F2B; } - else if (strncmp(model_name, "CPR-4011-4M21", strlen("CPR-4011-4M21")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } - return PSU_TYPE_AC_B2F; + else if (strncmp(model_name, "CPR-4011-4M21", STRLEN("CPR-4011-4M21")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_B2F; + } + else if (strncmp(model_name, "CPR-6011-2M11", STRLEN("CPR-6011-2M11")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_F2B; + } + else if (strncmp(model_name, "CPR-6011-2M21", STRLEN("CPR-6011-2M21")) == 0) { + if (modelname) { + strncpy(modelname, model_name, sizeof(model_name)); + } + return PSU_TYPE_AC_COMPUWARE_B2F; + } + } + + /* Check 3Y-Power AC model name */ + memset(model_name, 0, sizeof(model_name)); + node = (id == PSU1_ID) ? PSU1_AC_3YPOWER_EEPROM_NODE(psu_model_name) : PSU2_AC_3YPOWER_EEPROM_NODE(psu_model_name); + + if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { + if (strncmp(model_name, "YM-2401JCR", STRLEN("YM-2401JCR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JCR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_F2B; + } + else if (strncmp(model_name, "YM-2401JDR", STRLEN("YM-2401JDR")) == 0) { + if (modelname) { + model_name[STRLEN("YM-2401JDR")] = 0; + strncpy(modelname, model_name, 11); + } + return PSU_TYPE_AC_3YPOWER_B2F; } } /* Check DC model name */ memset(model_name, 0, sizeof(model_name)); - node = (id == PSU1_ID) ? PSU1_DC_HWMON_NODE(psu_model_name) : PSU2_DC_HWMON_NODE(psu_model_name); + node = (id == PSU1_ID) ? PSU1_DC_EEPROM_NODE(psu_model_name) : PSU2_DC_EEPROM_NODE(psu_model_name); if (deviceNodeReadString(node, model_name, sizeof(model_name), 0) == 0) { - if (strncmp(model_name, "um400d01G", strlen("um400d01G")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } + if (strncmp(model_name, "um400d01G", STRLEN("um400d01G")) == 0) { + if (modelname) { + model_name[STRLEN("um400d01G")] = 0; + strncpy(modelname, model_name, 10); + } return PSU_TYPE_DC_48V_B2F; } - else if (strncmp(model_name, "um400d01-01G", strlen("um400d01-01G")) == 0) { - if (modelname) { - strncpy(modelname, model_name, modelname_len-1); - } + else if (strncmp(model_name, "um400d01-01G", STRLEN("um400d01-01G")) == 0) { + if (modelname) { + model_name[STRLEN("um400d01-01G")] = 0; + strncpy(modelname, model_name, 13); + } return PSU_TYPE_DC_48V_F2B; } } @@ -167,3 +204,48 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) return PSU_TYPE_UNKNOWN; } +int psu_ym2401_pmbus_info_get(int id, char *node, int *value) +{ + int ret = 0; + char path[64] = {0}; + + *value = 0; + + if (PSU1_ID == id) { + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + } + else { + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + } + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ret; +} + +int psu_ym2401_pmbus_info_set(int id, char *node, int value) +{ + char path[64] = {0}; + + switch (id) { + case PSU1_ID: + sprintf(path, "%s%s", PSU1_AC_3YPOWER_PMBUS_PREFIX, node); + break; + case PSU2_ID: + sprintf(path, "%s%s", PSU2_AC_3YPOWER_PMBUS_PREFIX, node); + break; + default: + return ONLP_STATUS_E_UNSUPPORTED; + }; + + if (deviceNodeWriteInt(path, value, 0) < 0) { + AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path); + return ONLP_STATUS_E_INTERNAL; + } + + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.h index 1c8d033c..f49973e6 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/platform_lib.h @@ -35,21 +35,24 @@ #define CHASSIS_THERMAL_COUNT 4 #define CHASSIS_LED_COUNT 10 -#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/57-003c/" -#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/58-003f/" +#define PSU1_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/57-003c/" /* Compuware psu */ +#define PSU2_AC_PMBUS_PREFIX "/sys/bus/i2c/devices/58-003f/" /* Compuware psu */ +#define PSU1_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/57-0058/" /* 3YPower psu */ +#define PSU2_AC_3YPOWER_PMBUS_PREFIX "/sys/bus/i2c/devices/58-005b/" /* 3YPower psu */ -#define PSU1_AC_HWMON_PREFIX "/sys/bus/i2c/devices/57-0038/" -#define PSU1_DC_HWMON_PREFIX "/sys/bus/i2c/devices/57-0050/" -#define PSU2_AC_HWMON_PREFIX "/sys/bus/i2c/devices/58-003b/" -#define PSU2_DC_HWMON_PREFIX "/sys/bus/i2c/devices/58-0053/" +#define PSU1_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/57-0038/" +#define PSU1_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/57-0050/" +#define PSU2_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/58-003b/" +#define PSU2_DC_EEPROM_PREFIX "/sys/bus/i2c/devices/58-0053/" +#define PSU1_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/57-0050/" +#define PSU2_AC_3YPOWER_EEPROM_PREFIX "/sys/bus/i2c/devices/58-0053/" -#define PSU1_AC_HWMON_NODE(node) PSU1_AC_HWMON_PREFIX#node -#define PSU1_DC_HWMON_NODE(node) PSU1_DC_HWMON_PREFIX#node -#define PSU2_AC_HWMON_NODE(node) PSU2_AC_HWMON_PREFIX#node -#define PSU2_DC_HWMON_NODE(node) PSU2_DC_HWMON_PREFIX#node - -//#define SFP_HWMON_PREFIX "/sys/bus/i2c/devices/3-0050/" -//#define SFP_HWMON_NODE(node) SFP_HWMON_PREFIX#node +#define PSU1_AC_EEPROM_NODE(node) PSU1_AC_EEPROM_PREFIX#node +#define PSU1_DC_EEPROM_NODE(node) PSU1_DC_EEPROM_PREFIX#node +#define PSU2_AC_EEPROM_NODE(node) PSU2_AC_EEPROM_PREFIX#node +#define PSU2_DC_EEPROM_NODE(node) PSU2_DC_EEPROM_PREFIX#node +#define PSU1_AC_3YPOWER_EEPROM_NODE(node) PSU1_AC_3YPOWER_EEPROM_PREFIX#node +#define PSU2_AC_3YPOWER_EEPROM_NODE(node) PSU2_AC_3YPOWER_EEPROM_PREFIX#node #define IDPROM_PATH "/sys/devices/pci0000:00/0000:00:13.0/i2c-1/1-0057/eeprom" @@ -59,12 +62,25 @@ int deviceNodeReadString(char *filename, char *buffer, int buf_size, int data_le typedef enum psu_type { PSU_TYPE_UNKNOWN, - PSU_TYPE_AC_F2B, - PSU_TYPE_AC_B2F, + PSU_TYPE_AC_COMPUWARE_F2B, + PSU_TYPE_AC_COMPUWARE_B2F, + PSU_TYPE_AC_3YPOWER_F2B, + PSU_TYPE_AC_3YPOWER_B2F, PSU_TYPE_DC_48V_F2B, PSU_TYPE_DC_48V_B2F } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_ym2401_pmbus_info_get(int id, char *node, int *value); +int psu_ym2401_pmbus_info_set(int id, char *node, int value); + +#define DEBUG_MODE 0 + +#if (DEBUG_MODE == 1) + #define DEBUG_PRINT(fmt, args...) \ + printf("%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args) +#else + #define DEBUG_PRINT(fmt, args...) +#endif #endif /* __PLATFORM_LIB_H__ */ diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/psui.c index 0d59bd1a..7a14c060 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/psui.c @@ -24,7 +24,6 @@ * ***********************************************************/ #include -#include #include #include #include "platform_lib.h" @@ -52,10 +51,10 @@ psu_status_info_get(int id, int is_ac, char *node, int *value) *value = 0; if (PSU1_ID == id) { - sprintf(node_path, "%s%s", is_ac ? PSU1_AC_HWMON_PREFIX : PSU1_DC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU1_AC_EEPROM_PREFIX : PSU1_DC_EEPROM_PREFIX, node); } else if (PSU2_ID == id) { - sprintf(node_path, "%s%s", is_ac ? PSU2_AC_HWMON_PREFIX : PSU2_DC_HWMON_PREFIX, node); + sprintf(node_path, "%s%s", is_ac ? PSU2_AC_EEPROM_PREFIX : PSU2_DC_EEPROM_PREFIX, node); } ret = deviceNodeReadString(node_path, buf, sizeof(buf), 0); @@ -169,6 +168,43 @@ psu_um400d_info_get(onlp_psu_info_t* info) return ONLP_STATUS_OK; } +static int +psu_ym2401_info_get(onlp_psu_info_t* info) +{ + int val = 0; + int index = ONLP_OID_ID_GET(info->hdr.id); + + /* Set capability + */ + info->caps = ONLP_PSU_CAPS_AC; + + if (info->status & ONLP_PSU_STATUS_FAILED) { + return ONLP_STATUS_OK; + } + + /* Set the associated oid_table */ + info->hdr.coids[0] = ONLP_FAN_ID_CREATE(index + CHASSIS_FAN_COUNT); + info->hdr.coids[1] = ONLP_THERMAL_ID_CREATE(index + CHASSIS_THERMAL_COUNT); + + /* Read voltage, current and power */ + if (psu_ym2401_pmbus_info_get(index, "psu_v_out", &val) == 0) { + info->mvout = val; + info->caps |= ONLP_PSU_CAPS_VOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_i_out", &val) == 0) { + info->miout = val; + info->caps |= ONLP_PSU_CAPS_IOUT; + } + + if (psu_ym2401_pmbus_info_get(index, "psu_p_out", &val) == 0) { + info->mpout = val; + info->caps |= ONLP_PSU_CAPS_POUT; + } + + return ONLP_STATUS_OK; +} + /* * Get all information about the given PSU oid. */ @@ -215,6 +251,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) if (val != PSU_STATUS_POWER_GOOD) { info->status |= ONLP_PSU_STATUS_FAILED; + return 0; } @@ -223,10 +260,14 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) psu_type = get_psu_type(index, info->model, sizeof(info->model)); switch (psu_type) { - case PSU_TYPE_AC_F2B: - case PSU_TYPE_AC_B2F: + case PSU_TYPE_AC_COMPUWARE_F2B: + case PSU_TYPE_AC_COMPUWARE_B2F: ret = psu_cpr_4011_info_get(info); break; + case PSU_TYPE_AC_3YPOWER_F2B: + case PSU_TYPE_AC_3YPOWER_B2F: + ret = psu_ym2401_info_get(info); + break; case PSU_TYPE_DC_48V_F2B: case PSU_TYPE_DC_48V_B2F: ret = psu_um400d_info_get(info); diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/thermali.c b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/thermali.c index 6ab6f5a5..c4b2e2e5 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/thermali.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/module/src/thermali.c @@ -24,10 +24,9 @@ * ***********************************************************/ #include -#include #include #include -#include +#include "platform_lib.h" #define VALIDATE(_id) \ @@ -123,6 +122,9 @@ int onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) { int local_id; + int psu_id; + psu_type_t psu_type; + VALIDATE(id); local_id = ONLP_OID_ID_GET(id); @@ -135,5 +137,13 @@ onlp_thermali_info_get(onlp_oid_t id, onlp_thermal_info_t* info) return rv; } + psu_id = local_id - THERMAL_1_ON_PSU1 + 1; + psu_type = get_psu_type(psu_id, NULL, 0); + + if (psu_type == PSU_TYPE_AC_3YPOWER_F2B || psu_type == PSU_TYPE_AC_3YPOWER_B2F ) { + int rv = psu_ym2401_pmbus_info_get(psu_id, "psu_temp1_input", &info->mcelsius); + return rv; + } + return onlp_file_read_int(&info->mcelsius, devfiles[local_id]); } diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py index b71c2674..5eee6748 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py @@ -10,6 +10,7 @@ class OnlPlatform_x86_64_accton_as5812_54x_r0(OnlPlatformAccton, def baseconfig(self): self.insmod('cpr_4011_4mxx') + self.insmod("ym2651y") for m in [ 'cpld', 'fan', 'psu', 'leds', 'sfp' ]: self.insmod("x86-64-accton-as5812-54x-%s.ko" % m) @@ -43,12 +44,16 @@ class OnlPlatform_x86_64_accton_as5812_54x_r0(OnlPlatformAccton, ('pca9548', 0x70, 1), # initiate PSU-1 AC Power - ('as5812_54x_psu', 0x38, 57), + ('as5812_54x_psu1', 0x38, 57), ('cpr_4011_4mxx', 0x3c, 57), + ('as5812_54x_psu1', 0x50, 57), + ('ym2401', 0x58, 57), # initiate PSU-2 AC Power - ('as5812_54x_psu', 0x3b, 58), + ('as5812_54x_psu2', 0x3b, 58), ('cpr_4011_4mxx', 0x3f, 58), + ('as5812_54x_psu2', 0x53, 58), + ('ym2401', 0x5b, 58), # initiate lm75 ('lm75', 0x48, 61), From 93bb7848871e841e8ff164d79516aef318cfe380 Mon Sep 17 00:00:00 2001 From: roylee123 Date: Fri, 16 Jun 2017 16:10:29 +0800 Subject: [PATCH 26/31] Update platform accton-as5916-54xm to folow ONL's tradition --- .../module/auto/x86_64_accton_as5916_54xm.yml | 20 +++---- .../onlp/builds/src/module/src/debug.c | 1 - .../onlp/builds/src/module/src/platform_lib.c | 56 +------------------ 3 files changed, 12 insertions(+), 65 deletions(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml index 80e0c5ea..5631cabb 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/auto/x86_64_accton_as5916_54xm.yml @@ -5,35 +5,35 @@ ############################################################################### cdefs: &cdefs -- x86_64_accton_as5916_54xm_CONFIG_INCLUDE_LOGGING: +- X86_64_ACCTON_AS5916_54XM_CONFIG_INCLUDE_LOGGING: doc: "Include or exclude logging." default: 1 -- x86_64_accton_as5916_54xm_CONFIG_LOG_OPTIONS_DEFAULT: +- X86_64_ACCTON_AS5916_54XM_CONFIG_LOG_OPTIONS_DEFAULT: doc: "Default enabled log options." default: AIM_LOG_OPTIONS_DEFAULT -- x86_64_accton_as5916_54xm_CONFIG_LOG_BITS_DEFAULT: +- X86_64_ACCTON_AS5916_54XM_CONFIG_LOG_BITS_DEFAULT: doc: "Default enabled log bits." default: AIM_LOG_BITS_DEFAULT -- x86_64_accton_as5916_54xm_CONFIG_LOG_CUSTOM_BITS_DEFAULT: +- X86_64_ACCTON_AS5916_54XM_CONFIG_LOG_CUSTOM_BITS_DEFAULT: doc: "Default enabled custom log bits." default: 0 -- x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB: +- X86_64_ACCTON_AS5916_54XM_CONFIG_PORTING_STDLIB: doc: "Default all porting macros to use the C standard libraries." default: 1 -- x86_64_accton_as5916_54xm_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS: +- X86_64_ACCTON_AS5916_54XM_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS: doc: "Include standard library headers for stdlib porting macros." - default: x86_64_accton_as5916_54xm_CONFIG_PORTING_STDLIB -- x86_64_accton_as5916_54xm_CONFIG_INCLUDE_UCLI: + default: X86_64_ACCTON_AS5916_54XM_CONFIG_PORTING_STDLIB +- X86_64_ACCTON_AS5916_54XM_CONFIG_INCLUDE_UCLI: doc: "Include generic uCli support." default: 0 -- x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION: +- X86_64_ACCTON_AS5916_54XM_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION: doc: "Assume chassis fan direction is the same as the PSU fan direction." default: 0 definitions: cdefs: - x86_64_accton_as5916_54xm_CONFIG_HEADER: + X86_64_ACCTON_AS5916_54XM_CONFIG_HEADER: defs: *cdefs basename: x86_64_accton_as5916_54xm_config diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c index 90f21761..3c7c8762 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/debug.c @@ -1,4 +1,3 @@ -#include "x86_64_accton_as5916_54xm_int.h" #if x86_64_accton_as5916_54xm_CONFIG_INCLUDE_DEBUG == 1 diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c index b14867bd..7db9630c 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5916-54xm/onlp/builds/src/module/src/platform_lib.c @@ -31,70 +31,18 @@ #define PSU_NODE_MAX_PATH_LEN 64 -int _onlp_file_write(char *filename, char *buffer, int buf_size, int data_len) -{ - int fd; - int len; - - if ((buffer == NULL) || (buf_size < 0)) { - return -1; - } - - if ((fd = open(filename, O_WRONLY, S_IWUSR)) == -1) { - return -1; - } - - if ((len = write(fd, buffer, buf_size)) < 0) { - close(fd); - return -1; - } - - if ((close(fd) == -1)) { - return -1; - } - - if ((len > buf_size) || (data_len != 0 && len != data_len)) { - return -1; - } - - return 0; -} - int onlp_file_write_integer(char *filename, int value) { - char buf[8] = {0}; - sprintf(buf, "%d", value); - - return _onlp_file_write(filename, buf, (int)strlen(buf), 0); + return onlp_file_write_int(value, filename, NULL); } int onlp_file_read_binary(char *filename, char *buffer, int buf_size, int data_len) { - int fd; - int len; - if ((buffer == NULL) || (buf_size < 0)) { return -1; } - if ((fd = open(filename, O_RDONLY)) == -1) { - return -1; - } - - if ((len = read(fd, buffer, buf_size)) < 0) { - close(fd); - return -1; - } - - if ((close(fd) == -1)) { - return -1; - } - - if ((len > buf_size) || (data_len != 0 && len != data_len)) { - return -1; - } - - return 0; + return onlp_file_read((uint8_t*)buffer, buf_size, &data_len, "%s", filename); } int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_len) From f4b169c0e5c2d3624470c0ae364d4e5473f98d27 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Mon, 26 Jun 2017 07:56:42 -0700 Subject: [PATCH 27/31] Builder8 1.7 ------------ - Fix broken cross dependencies. - Update Packages. - Additional build dependencies. --- docker/images/builder8/1.7/Dockerfile | 27 +++++++++++++++++++++++++++ docker/images/builder8/1.7/Makefile | 19 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 docker/images/builder8/1.7/Dockerfile create mode 100644 docker/images/builder8/1.7/Makefile diff --git a/docker/images/builder8/1.7/Dockerfile b/docker/images/builder8/1.7/Dockerfile new file mode 100644 index 00000000..55ffdadf --- /dev/null +++ b/docker/images/builder8/1.7/Dockerfile @@ -0,0 +1,27 @@ +############################################################ +# +# Fix broken cross dependencies. +# Update Packages. +# Additional build dependencies. +# +############################################################ +FROM opennetworklinux/builder8:1.6 +MAINTAINER Jeffrey Townsend +#ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get install -f && \ + apt-get update + +RUN xapt -a powerpc libsnmp-dev && \ + xapt -a armel libsnmp-dev && \ + xapt -a arm64 libsnmp-dev + +RUN apt-get install -f + +RUN DEBIAN_FRONTEND=noninteractive apt-get install tshark -y +RUN sudo apt-get install -yq libpcap-dev libxml2-dev python-dev g++ swig tcpreplay libusb-dev + +# Docker shell and other container tools. +# +COPY docker_shell /bin/docker_shell +COPY container-id /bin/container-id diff --git a/docker/images/builder8/1.7/Makefile b/docker/images/builder8/1.7/Makefile new file mode 100644 index 00000000..59f1dc05 --- /dev/null +++ b/docker/images/builder8/1.7/Makefile @@ -0,0 +1,19 @@ +VERSION=1.7 +USER=opennetworklinux +REPO=builder8 + +TOOLS=../../../tools/docker_shell ../../../tools/container-id + +build: check_version + cp $(TOOLS) . + docker build -t $(USER)/$(REPO):$(VERSION) . + rm -rf $(notdir $(TOOLS)) + +# +# Todo: Query remote repository to see if the request version already exists to avoid accidental overwrites +# when a new image is built but the VERSION variable is not updated. +# +check_version: + +push: + docker push $(USER)/$(REPO):$(VERSION) From c29bcfda95ea48818551f52d37a33c0a8c7e588d Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Mon, 26 Jun 2017 07:58:00 -0700 Subject: [PATCH 28/31] Update to builder8:1.7. --- docker/tools/onlbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/tools/onlbuilder b/docker/tools/onlbuilder index aabd5f5e..06463d29 100755 --- a/docker/tools/onlbuilder +++ b/docker/tools/onlbuilder @@ -18,7 +18,7 @@ g_current_uid = os.getuid() g_timestamp = datetime.datetime.now().strftime("%Y-%m-%d.%H%M%S") g_builder7_image_name="opennetworklinux/builder7:1.2" -g_builder8_image_name="opennetworklinux/builder8:1.6" +g_builder8_image_name="opennetworklinux/builder8:1.7" g_default_image_name=g_builder8_image_name g_default_container_name = "%s_%s" % (g_current_user, g_timestamp) From 109eae5e9609a7dd250657df6dcec2e589272be2 Mon Sep 17 00:00:00 2001 From: Jonathan Tsai Date: Tue, 27 Jun 2017 11:10:38 +0800 Subject: [PATCH 29/31] Update Quanta SYS_OBJECT_ID for each platform --- .../r0/src/python/powerpc_quanta_lb9_r0/__init__.py | 10 +++++++++- .../r0/src/python/powerpc_quanta_ly2_r0/__init__.py | 10 +++++++++- .../python/x86_64_quanta_ix1_rangeley_r0/__init__.py | 10 +++++++++- .../python/x86_64_quanta_ix2_rangeley_r0/__init__.py | 10 +++++++++- .../r0/src/python/x86_64_quanta_ly4r_r0/__init__.py | 10 +++++++++- .../python/x86_64_quanta_ly6_rangeley_r0/__init__.py | 10 +++++++++- .../python/x86_64_quanta_ly8_rangeley_r0/__init__.py | 10 +++++++++- .../python/x86_64_quanta_ly9_rangeley_r0/__init__.py | 10 +++++++++- 8 files changed, 72 insertions(+), 8 deletions(-) mode change 100644 => 100755 packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py mode change 100644 => 100755 packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py diff --git a/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py b/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py old mode 100644 new mode 100755 index abb2c5ac..4063f7ce --- a/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py +++ b/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py @@ -7,7 +7,15 @@ class OnlPlatform_powerpc_quanta_lb9_r0(OnlPlatformQuanta, OnlPlatformPortConfig_48x1_4x10): PLATFORM='powerpc-quanta-lb9-r0' MODEL="LB9" - SYS_OBJECT_ID=".1048.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".1048.1900" def baseconfig(self): platform_fancontrol="%s/etc/fancontrol" % self.basedir_onl() diff --git a/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py b/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py old mode 100644 new mode 100755 index 202f214d..50aa756a --- a/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py +++ b/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py @@ -8,7 +8,15 @@ class OnlPlatform_powerpc_quanta_ly2_r0(OnlPlatformQuanta, OnlPlatformPortConfig_48x10_4x40): PLATFORM='powerpc-quanta-ly2-r0' MODEL="LY2" - SYS_OBJECT_ID=".3048.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".3048.2200" def baseconfig(self): self.insmod("quanta-ly2-i2c-mux.ko") diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix1-rangeley/platform-config/r0/src/python/x86_64_quanta_ix1_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ix1-rangeley/platform-config/r0/src/python/x86_64_quanta_ix1_rangeley_r0/__init__.py index 56954b5b..e77628c7 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix1-rangeley/platform-config/r0/src/python/x86_64_quanta_ix1_rangeley_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix1-rangeley/platform-config/r0/src/python/x86_64_quanta_ix1_rangeley_r0/__init__.py @@ -5,7 +5,15 @@ class OnlPlatform_x86_64_quanta_ix1_rangeley_r0(OnlPlatformQuanta, OnlPlatformPortConfig_32x100): PLATFORM='x86-64-quanta-ix1-rangeley-r0' MODEL="IX1" - SYS_OBJECT_ID=".8.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".7032.3100" def baseconfig(self): self.insmod("qci_pmbus") diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py index 39ed6904..3b134782 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/platform-config/r0/src/python/x86_64_quanta_ix2_rangeley_r0/__init__.py @@ -5,7 +5,15 @@ class OnlPlatform_x86_64_quanta_ix2_rangeley_r0(OnlPlatformQuanta, OnlPlatformPortConfig_48x25_8x100): PLATFORM='x86-64-quanta-ix2-rangeley-r0' MODEL="IX2" - SYS_OBJECT_ID=".8.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".4048.3200" def baseconfig(self): # Expose PSOC that behind PCA9641 diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly4r/platform-config/r0/src/python/x86_64_quanta_ly4r_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ly4r/platform-config/r0/src/python/x86_64_quanta_ly4r_r0/__init__.py index a15781f6..a88370af 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ly4r/platform-config/r0/src/python/x86_64_quanta_ly4r_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly4r/platform-config/r0/src/python/x86_64_quanta_ly4r_r0/__init__.py @@ -5,7 +5,15 @@ class OnlPlatform_x86_64_quanta_ly4r_r0(OnlPlatformQuanta, OnlPlatformPortConfig_48x1_4x10): PLATFORM='x86-64-quanta-ly4r-r0' MODEL="LY4R" - SYS_OBJECT_ID=".8.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".1048.2418" def baseconfig(self): self.insmod("quanta_platform_ly4r") diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py index a507afba..06df97c9 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py @@ -5,7 +5,15 @@ class OnlPlatform_x86_64_quanta_ly6_rangeley_r0(OnlPlatformQuanta, OnlPlatformPortConfig_32x40): PLATFORM='x86-64-quanta-ly6-rangeley-r0' MODEL='LY6' - SYS_OBJECT_ID='.6.1' + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID='.5032.2600' def baseconfig(self): self.insmod("quanta_hwmon_ly_series") diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py index a8cdbdd2..8a203a5e 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py @@ -5,7 +5,15 @@ class OnlPlatform_x86_64_quanta_ly8_rangeley_r0(OnlPlatformQuanta, OnlPlatformPortConfig_48x10_6x40): PLATFORM='x86-64-quanta-ly8-rangeley-r0' MODEL="LY8" - SYS_OBJECT_ID=".8.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".3048.2800" def baseconfig(self): self.insmod("emerson700") diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly9-rangeley/platform-config/r0/src/python/x86_64_quanta_ly9_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ly9-rangeley/platform-config/r0/src/python/x86_64_quanta_ly9_rangeley_r0/__init__.py index 6cff7f46..b8b49511 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ly9-rangeley/platform-config/r0/src/python/x86_64_quanta_ly9_rangeley_r0/__init__.py +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly9-rangeley/platform-config/r0/src/python/x86_64_quanta_ly9_rangeley_r0/__init__.py @@ -5,7 +5,15 @@ class OnlPlatform_x86_64_quanta_ly9_rangeley_r0(OnlPlatformQuanta, OnlPlatformPortConfig_48x10_6x40): PLATFORM='x86-64-quanta-ly9-rangeley-r0' MODEL="LY9" - SYS_OBJECT_ID=".9.1" + """ Define Quanta SYS_OBJECT_ID rule. + + SYS_OBJECT_ID = .xxxx.ABCC + "xxxx" define QCT device mark. For example, LB9->1048, LY2->3048 + "A" define QCT switch series name: LB define 1, LY define 2, IX define 3 + "B" define QCT switch series number 1: For example, LB9->9, LY2->2 + "CC" define QCT switch series number 2: For example, LY2->00, LY4R->18(R is 18th english letter) + """ + SYS_OBJECT_ID=".3048.2900" def baseconfig(self): self.insmod("emerson700") From f08a606527d91c86700c57220f049dc6120b525f Mon Sep 17 00:00:00 2001 From: Jonathan Tsai Date: Tue, 27 Jun 2017 11:13:41 +0800 Subject: [PATCH 30/31] [Quanta-IX2] Add sfp functions of onlp_sfpi_control_set() and onlp_sfpi_control_get() --- .../x86_64_quanta_ix2_rangeley_gpio_table.h | 32 +- .../module/src/sfpi.c | 307 ++++++++++++++---- 2 files changed, 270 insertions(+), 69 deletions(-) diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h index 053b4606..e31cb400 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/inc/x86_64_quanta_ix2_rangeley/x86_64_quanta_ix2_rangeley_gpio_table.h @@ -51,13 +51,29 @@ #define QUANTA_IX2_FAN_FAIL_LED_4 (QUANTA_IX2_FAN_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,7)) #define QUANTA_IX2_PCA9698_1_GPIO_BASE 0x50 -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_1_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,2)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_2_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,6)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_3_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,2)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_4_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,6)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_5_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,2)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_6_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,6)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_7_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,2)) -#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_8_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_49_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,0)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_49_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_49_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,3)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_50_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,4)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_50_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_50_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(0,7)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_51_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,0)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_51_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_51_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,3)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_52_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,4)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_52_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_52_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(1,7)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_53_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,0)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_53_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_53_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,3)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_54_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,4)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_54_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_54_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(2,7)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_55_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,0)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_55_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,2)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_55_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,3)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_56_RESET_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,4)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_56_PRSNT_N (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,6)) +#define QUANTA_IX2_PCA9698_1_GPIO_QSFP_56_LPMOD_P (QUANTA_IX2_PCA9698_1_GPIO_BASE + QUANTA_IX2_PCA953x_GPIO(3,7)) #endif /* __X86_64_QUANTA_IX2_RANGELEY_GPIO_TABLE_H__ */ diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c index b507c460..0d9d3e4a 100755 --- a/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c +++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ix2-rangeley/onlp/builds/src/x86_64_quanta_ix2_rangeley/module/src/sfpi.c @@ -28,7 +28,7 @@ #include #include #include "x86_64_quanta_ix2_rangeley_log.h" - +#include #include #include @@ -46,78 +46,91 @@ typedef struct sfpmap_s { static sfpmap_t sfpmap__[] = { - { 1, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-1/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-32/32-0050/eeprom", NULL }, - { 2, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-2/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-33/33-0050/eeprom", NULL }, - { 3, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-3/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-34/34-0050/eeprom", NULL }, - { 4, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-4/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-35/35-0050/eeprom", NULL }, - { 5, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-5/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-36/36-0050/eeprom", NULL }, - { 6, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-6/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-37/37-0050/eeprom", NULL }, - { 7, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-7/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-38/38-0050/eeprom", NULL }, - { 8, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-8/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-39/39-0050/eeprom", NULL }, - { 9, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-9/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-40/40-0050/eeprom", NULL }, - { 10, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-10/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-41/41-0050/eeprom", NULL }, - { 11, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-11/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-42/42-0050/eeprom", NULL }, - { 12, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-12/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-43/43-0050/eeprom", NULL }, - { 13, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-13/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-44/44-0050/eeprom", NULL }, - { 14, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-14/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-45/45-0050/eeprom", NULL }, - { 15, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-15/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-46/46-0050/eeprom", NULL }, - { 16, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-16/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-47/47-0050/eeprom", NULL }, - { 17, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-17/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-48/48-0050/eeprom", NULL }, - { 18, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-18/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-49/49-0050/eeprom", NULL }, - { 19, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-19/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-50/50-0050/eeprom", NULL }, - { 20, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-20/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-51/51-0050/eeprom", NULL }, - { 21, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-21/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-52/52-0050/eeprom", NULL }, - { 22, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-22/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-53/53-0050/eeprom", NULL }, - { 23, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-23/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-54/54-0050/eeprom", NULL }, - { 24, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-24/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-55/55-0050/eeprom", NULL }, - { 25, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-25/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-56/56-0050/eeprom", NULL }, - { 26, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-26/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-57/57-0050/eeprom", NULL }, - { 27, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-27/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-58/58-0050/eeprom", NULL }, - { 28, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-28/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-59/59-0050/eeprom", NULL }, - { 29, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-29/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-60/60-0050/eeprom", NULL }, - { 30, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-30/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-61/61-0050/eeprom", NULL }, - { 31, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-31/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-62/62-0050/eeprom", NULL }, - { 32, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-32/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-63/63-0050/eeprom", NULL }, - { 33, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-33/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-64/64-0050/eeprom", NULL }, - { 34, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-34/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-65/65-0050/eeprom", NULL }, - { 35, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-35/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-66/66-0050/eeprom", NULL }, - { 36, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-36/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-67/67-0050/eeprom", NULL }, - { 37, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-37/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-68/68-0050/eeprom", NULL }, - { 38, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-38/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-69/69-0050/eeprom", NULL }, - { 39, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-39/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-70/70-0050/eeprom", NULL }, - { 40, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-40/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-71/71-0050/eeprom", NULL }, - { 41, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-41/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-72/72-0050/eeprom", NULL }, - { 42, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-42/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-73/73-0050/eeprom", NULL }, - { 43, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-43/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-74/74-0050/eeprom", NULL }, - { 44, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-44/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-75/75-0050/eeprom", NULL }, - { 45, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-45/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-76/76-0050/eeprom", NULL }, - { 46, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-46/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-77/77-0050/eeprom", NULL }, - { 47, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-47/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-78/78-0050/eeprom", NULL }, - { 48, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-48/pre_n", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-79/79-0050/eeprom", NULL }, + { 1, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-1/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-32/32-0050/eeprom", NULL }, + { 2, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-2/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-33/33-0050/eeprom", NULL }, + { 3, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-3/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-34/34-0050/eeprom", NULL }, + { 4, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-4/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-35/35-0050/eeprom", NULL }, + { 5, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-5/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-36/36-0050/eeprom", NULL }, + { 6, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-6/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-37/37-0050/eeprom", NULL }, + { 7, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-7/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-38/38-0050/eeprom", NULL }, + { 8, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-8/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-39/39-0050/eeprom", NULL }, + { 9, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-9/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-40/40-0050/eeprom", NULL }, + { 10, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-10/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-41/41-0050/eeprom", NULL }, + { 11, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-11/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-42/42-0050/eeprom", NULL }, + { 12, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-12/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-43/43-0050/eeprom", NULL }, + { 13, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-13/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-44/44-0050/eeprom", NULL }, + { 14, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-14/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-45/45-0050/eeprom", NULL }, + { 15, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-15/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-46/46-0050/eeprom", NULL }, + { 16, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0038/cpld-sfp28/port-16/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-47/47-0050/eeprom", NULL }, + { 17, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-17/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-48/48-0050/eeprom", NULL }, + { 18, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-18/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-49/49-0050/eeprom", NULL }, + { 19, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-19/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-50/50-0050/eeprom", NULL }, + { 20, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-20/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-51/51-0050/eeprom", NULL }, + { 21, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-21/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-52/52-0050/eeprom", NULL }, + { 22, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-22/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-53/53-0050/eeprom", NULL }, + { 23, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-23/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-54/54-0050/eeprom", NULL }, + { 24, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-24/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/i2c-55/55-0050/eeprom", NULL }, + { 25, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-25/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-56/56-0050/eeprom", NULL }, + { 26, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-26/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-57/57-0050/eeprom", NULL }, + { 27, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-27/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-58/58-0050/eeprom", NULL }, + { 28, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-28/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-59/59-0050/eeprom", NULL }, + { 29, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-29/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-60/60-0050/eeprom", NULL }, + { 30, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-30/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-61/61-0050/eeprom", NULL }, + { 31, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-31/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-62/62-0050/eeprom", NULL }, + { 32, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-16/16-0039/cpld-sfp28/port-32/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-63/63-0050/eeprom", NULL }, + { 33, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-33/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-64/64-0050/eeprom", NULL }, + { 34, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-34/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-65/65-0050/eeprom", NULL }, + { 35, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-35/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-66/66-0050/eeprom", NULL }, + { 36, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-36/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-67/67-0050/eeprom", NULL }, + { 37, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-37/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-68/68-0050/eeprom", NULL }, + { 38, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-38/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-69/69-0050/eeprom", NULL }, + { 39, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-39/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-70/70-0050/eeprom", NULL }, + { 40, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-40/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-71/71-0050/eeprom", NULL }, + { 41, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-41/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-72/72-0050/eeprom", NULL }, + { 42, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-42/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-73/73-0050/eeprom", NULL }, + { 43, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-43/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-74/74-0050/eeprom", NULL }, + { 44, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-44/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-75/75-0050/eeprom", NULL }, + { 45, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-45/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-76/76-0050/eeprom", NULL }, + { 46, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-46/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-77/77-0050/eeprom", NULL }, + { 47, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-47/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-78/78-0050/eeprom", NULL }, + { 48, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/17-0038/cpld-sfp28/port-48/%s", NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-17/i2c-79/79-0050/eeprom", NULL }, }; typedef struct qsfpmap_s { int port; int present_gpio; - const char* reset_gpio; + int reset_gpio; + int lplmod_gpio; const char* eeprom; const char* dom; } qsfpmap_t; static qsfpmap_t qsfpmap__[] = { - { 49, QUANTA_IX2_PCA9698_1_GPIO_QSFP_1_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-80/80-0050/eeprom", NULL }, - { 50, QUANTA_IX2_PCA9698_1_GPIO_QSFP_2_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-81/81-0050/eeprom", NULL }, - { 51, QUANTA_IX2_PCA9698_1_GPIO_QSFP_3_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-82/82-0050/eeprom", NULL }, - { 52, QUANTA_IX2_PCA9698_1_GPIO_QSFP_4_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-83/83-0050/eeprom", NULL }, - { 53, QUANTA_IX2_PCA9698_1_GPIO_QSFP_5_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-84/84-0050/eeprom", NULL }, - { 54, QUANTA_IX2_PCA9698_1_GPIO_QSFP_6_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-85/85-0050/eeprom", NULL }, - { 55, QUANTA_IX2_PCA9698_1_GPIO_QSFP_7_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-86/86-0050/eeprom", NULL }, - { 56, QUANTA_IX2_PCA9698_1_GPIO_QSFP_8_PRSNT_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-87/87-0050/eeprom", NULL }, + { 49, QUANTA_IX2_PCA9698_1_GPIO_QSFP_49_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_49_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_49_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-80/80-0050/eeprom", NULL }, + { 50, QUANTA_IX2_PCA9698_1_GPIO_QSFP_50_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_50_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_50_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-81/81-0050/eeprom", NULL }, + { 51, QUANTA_IX2_PCA9698_1_GPIO_QSFP_51_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_51_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_51_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-82/82-0050/eeprom", NULL }, + { 52, QUANTA_IX2_PCA9698_1_GPIO_QSFP_52_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_52_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_52_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-83/83-0050/eeprom", NULL }, + { 53, QUANTA_IX2_PCA9698_1_GPIO_QSFP_53_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_53_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_53_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-84/84-0050/eeprom", NULL }, + { 54, QUANTA_IX2_PCA9698_1_GPIO_QSFP_54_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_54_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_54_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-85/85-0050/eeprom", NULL }, + { 55, QUANTA_IX2_PCA9698_1_GPIO_QSFP_55_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_55_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_55_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-86/86-0050/eeprom", NULL }, + { 56, QUANTA_IX2_PCA9698_1_GPIO_QSFP_56_PRSNT_N, QUANTA_IX2_PCA9698_1_GPIO_QSFP_56_RESET_P, QUANTA_IX2_PCA9698_1_GPIO_QSFP_56_LPMOD_P, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-18/i2c-87/87-0050/eeprom", NULL }, }; #define SFP_GET(_port) (sfpmap__ + _port - 1) #define QSFP_GET(_port) (qsfpmap__ + _port - 49) +#define MAX_SFP_PATH 128 +static char sfp_node_path[MAX_SFP_PATH] = {0}; + +static char* +sfp_get_port_path(int port, char *node_name) +{ + sfpmap_t* sfp = SFP_GET(port); + + sprintf(sfp_node_path, sfp->present_cpld, + node_name); + return sfp_node_path; +} int onlp_sfpi_init(void) @@ -132,6 +145,10 @@ onlp_sfpi_init(void) for(i = 49; i < 57 ; i ++) { qsfp = QSFP_GET(i); onlp_gpio_export(qsfp->present_gpio, ONLP_GPIO_DIRECTION_IN); + onlp_gpio_export(qsfp->reset_gpio, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_set(qsfp->reset_gpio, 0); + onlp_gpio_export(qsfp->lplmod_gpio, ONLP_GPIO_DIRECTION_OUT); + onlp_gpio_set(qsfp->lplmod_gpio, 0); } return ret; @@ -188,9 +205,7 @@ onlp_sfpi_is_present(int port) } } else{ - sfpmap_t* sfp = SFP_GET(port); - - return onlplib_sfp_is_present_file(sfp->present_cpld, /* Present */ "1\n", /* Absent */ "0\n"); + return onlplib_sfp_is_present_file(sfp_get_port_path(port, "pre_n"), /* Present */ "1\n", /* Absent */ "0\n"); } } @@ -220,3 +235,173 @@ onlp_sfpi_dom_read(int port, uint8_t data[256]) } } +int +onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value) +{ + int rv; + + if(port > 48){ + qsfpmap_t* qsfp = QSFP_GET(port); + switch(control){ + case ONLP_SFP_CONTROL_RESET_STATE: + { + if(onlp_gpio_set(qsfp->reset_gpio, value) == ONLP_STATUS_OK){ + rv = ONLP_STATUS_OK; + } + else{ + AIM_LOG_ERROR("Unable to set reset status to port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + break; + } + + case ONLP_SFP_CONTROL_LP_MODE: + { + if(onlp_gpio_set(qsfp->lplmod_gpio, value) == ONLP_STATUS_OK){ + rv = ONLP_STATUS_OK; + } + else{ + AIM_LOG_ERROR("Unable to set lp_mode status to port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + break; + } + + default: + rv = ONLP_STATUS_E_UNSUPPORTED; + } + } + else{ + switch(control){ + case ONLP_SFP_CONTROL_TX_DISABLE: + { + char* path = sfp_get_port_path(port, "tx_dis"); + + if (onlp_file_write_int(value, path) != 0) { + AIM_LOG_ERROR("Unable to set tx_disable status to port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + default: + rv = ONLP_STATUS_E_UNSUPPORTED; + break; + } + } + + return rv; +} + +int +onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value) +{ + int rv; + char* path = NULL; + + if(port > 48){ + qsfpmap_t* qsfp = QSFP_GET(port); + + switch(control){ + case ONLP_SFP_CONTROL_RESET_STATE: + { + if(onlp_gpio_get(qsfp->reset_gpio, value) == ONLP_STATUS_OK){ + rv = ONLP_STATUS_OK; + } + else{ + AIM_LOG_ERROR("Unable to read reset status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + break; + } + + case ONLP_SFP_CONTROL_LP_MODE: + { + if(onlp_gpio_get(qsfp->lplmod_gpio, value) == ONLP_STATUS_OK){ + rv = ONLP_STATUS_OK; + } + else{ + AIM_LOG_ERROR("Unable to read lp_mode status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + break; + } + + case ONLP_SFP_CONTROL_RX_LOS: + { + *value = 0; + rv = ONLP_STATUS_OK; + break; + } + + case ONLP_SFP_CONTROL_TX_DISABLE: + { + *value = 0; + rv = ONLP_STATUS_OK; + break; + } + + default: + rv = ONLP_STATUS_E_UNSUPPORTED; + } + } + else{ + switch(control){ + case ONLP_SFP_CONTROL_RX_LOS: + { + path = sfp_get_port_path(port, "rx_los"); + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read rx_los status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + case ONLP_SFP_CONTROL_TX_FAULT: + { + path = sfp_get_port_path(port, "tx_fault"); + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read tx_fault status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + rv = ONLP_STATUS_OK; + } + break; + } + + case ONLP_SFP_CONTROL_TX_DISABLE: + { + path = sfp_get_port_path(port, "tx_dis"); + + if (onlp_file_read_int(value, path) < 0) { + AIM_LOG_ERROR("Unable to read tx_disabled status from port(%d)\r\n", port); + rv = ONLP_STATUS_E_INTERNAL; + } + else { + if(*value == 0){ + *value = 1; + } + else{ + *value = 0; + } + rv = ONLP_STATUS_OK; + } + break; + } + + default: + rv = ONLP_STATUS_E_UNSUPPORTED; + } + } + + return rv; +} From a4cefaf8f57434d9526d5908a2ff91c6a17903a7 Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Fri, 30 Jun 2017 08:59:20 +0200 Subject: [PATCH 31/31] tools: use `/usr/bin/python2` instead of `/usr/bin/python` python3 is starting to become the default on all major distributions. Using `/usr/bin/python2` should be safe for the near future. --- docker/tools/container-id | 2 +- docker/tools/onlbuilder | 2 +- tools/cpiomod.py | 2 +- tools/filenamer.py | 2 +- tools/flat-image-tree.py | 2 +- tools/make-versions.py | 2 +- tools/mkinstaller.py | 2 +- tools/mkshar | 2 +- tools/onl-platform-pkgs.py | 2 +- tools/onlplatform.py | 2 +- tools/onlpm.py | 2 +- tools/onlrfs.py | 2 +- tools/onlu.py | 2 +- tools/onlyaml.py | 2 +- tools/sjson.py | 2 +- tools/submodules.py | 2 +- tools/switool.py | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docker/tools/container-id b/docker/tools/container-id index c9e34827..065ff80b 100755 --- a/docker/tools/container-id +++ b/docker/tools/container-id @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 # -*- python -*- import re diff --git a/docker/tools/onlbuilder b/docker/tools/onlbuilder index 06463d29..f99746ff 100755 --- a/docker/tools/onlbuilder +++ b/docker/tools/onlbuilder @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 import os import sys diff --git a/tools/cpiomod.py b/tools/cpiomod.py index 26ccef6a..dc20fb13 100755 --- a/tools/cpiomod.py +++ b/tools/cpiomod.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 import sys import os import argparse diff --git a/tools/filenamer.py b/tools/filenamer.py index 5f74d5ab..51c42f9a 100755 --- a/tools/filenamer.py +++ b/tools/filenamer.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # This script provides the file naming scheme for diff --git a/tools/flat-image-tree.py b/tools/flat-image-tree.py index 663686da..74c330e9 100755 --- a/tools/flat-image-tree.py +++ b/tools/flat-image-tree.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # Flat Image Tree Generator diff --git a/tools/make-versions.py b/tools/make-versions.py index 5bc2625d..28084e9a 100755 --- a/tools/make-versions.py +++ b/tools/make-versions.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ import os import sys diff --git a/tools/mkinstaller.py b/tools/mkinstaller.py index ac4dc432..9ca57909 100755 --- a/tools/mkinstaller.py +++ b/tools/mkinstaller.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # Build an ONL Installer diff --git a/tools/mkshar b/tools/mkshar index fa63795a..e5bbffeb 100755 --- a/tools/mkshar +++ b/tools/mkshar @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 """mkshar diff --git a/tools/onl-platform-pkgs.py b/tools/onl-platform-pkgs.py index fd2d1b5a..920c74ad 100755 --- a/tools/onl-platform-pkgs.py +++ b/tools/onl-platform-pkgs.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # This script expects a yaml file containing the list diff --git a/tools/onlplatform.py b/tools/onlplatform.py index 119213d3..06c284e7 100755 --- a/tools/onlplatform.py +++ b/tools/onlplatform.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 """onlplatform.py diff --git a/tools/onlpm.py b/tools/onlpm.py index 074dd930..deaad7c7 100755 --- a/tools/onlpm.py +++ b/tools/onlpm.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # ONL Package Management diff --git a/tools/onlrfs.py b/tools/onlrfs.py index f8833694..54f36ead 100755 --- a/tools/onlrfs.py +++ b/tools/onlrfs.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # ONL Root Filesystem Generator diff --git a/tools/onlu.py b/tools/onlu.py index cc4b5f6c..19e4abd1 100644 --- a/tools/onlu.py +++ b/tools/onlu.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # Common utilities for the ONL python tools. diff --git a/tools/onlyaml.py b/tools/onlyaml.py index 513292cf..92c9ce59 100755 --- a/tools/onlyaml.py +++ b/tools/onlyaml.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # Extended YAML Support diff --git a/tools/sjson.py b/tools/sjson.py index 78a777e6..4c0543e9 100755 --- a/tools/sjson.py +++ b/tools/sjson.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # Simple JSON Generator diff --git a/tools/submodules.py b/tools/submodules.py index 9e8deba4..1cca99b0 100755 --- a/tools/submodules.py +++ b/tools/submodules.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ # # diff --git a/tools/switool.py b/tools/switool.py index 2790bf09..26eb2fb1 100755 --- a/tools/switool.py +++ b/tools/switool.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python2 ############################################################ import argparse import sys