BAL and Maple Release 2.2
Signed-off-by: Shad Ansari <developer@Carbon.local>
diff --git a/bcm68620_release/release/host_customized/board/wrx/Makefile b/bcm68620_release/release/host_customized/board/wrx/Makefile
new file mode 100644
index 0000000..67d1e07
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/Makefile
@@ -0,0 +1,14 @@
+# Maple board specific configurations. Relevant only if working in Linux
+#
+MOD_TYPE = lib
+MOD_NAME = bcm_board
+
+ifeq ("$(OS_KERNEL)", "linux")
+ifeq ("$(ENABLE_CLI)", "y")
+
+MOD_DEPS = cli i2c_devs api_cli bcm_dev_ctrl_linux
+
+srcs = bcmolt_board.c bcmolt_board_cli.c
+endif
+endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.c b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.c
new file mode 100644
index 0000000..479c5f9
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.c
@@ -0,0 +1,702 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software. The special exception does not apply to any modifications
+ of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+*/
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <bcmcli.h>
+#include <bcmolt_i2c_devs_ioctl.h>
+#include <bcmolt_dev_ctrl_ioctl.h>
+#include <bcmolt_api.h>
+#include <bcmolt_model_types.h>
+#include <bcmolt_fld.h>
+#include "bcmolt_board.h"
+#include "bcmolt_dpll_table.h"
+
+#define BCM_I2C_DEV_ADDR_START typedef enum {
+#define BCM_I2C_DEV_ADDR(name, desc, val) name = val,
+#define BCM_I2C_DEV_ADDR_END } bcm_i2c_dev_addr;
+
+#define BCM_FPGA_REG_FPGA_VERSION 0x0
+#define BCM_FPGA_REG_BOARD_CONF 0x1
+#define BCM_FPGA_REG_RESETS 0x2
+/* Enable/disable transceiver */
+#define BCM_FPGA_REG_TRX_ENABLE 0x3
+#define BCM_FPGA_REG_TRX_FAIL 0x4
+/* Is transceiver present ? */
+#define BCM_FPGA_REG_TRX_IS_PRESENT 0x5
+#define BCM_FPGA_REG_CXP_CONTROLS 0x6
+#define BCM_FPGA_REG_SHIFT_REGISTER_DATA 0x7
+#define BCM_FPGA_REG_SHIFT_REGISTER_CONTROL 0x8
+#define BCM_FPGA_REG_LEDS 0x9
+#define BCM_FPGA_REG_DEBUG_LEDS 0xA
+#define BCM_FPGA_REG_GPIO_DIR 0xB
+#define BCM_FPGA_REG_GPIO_INPUT 0xC
+#define BCM_FPGA_REG_GPIO_OUTPUT 0xD
+#define BCM_FPGA_REG_GPIO_IRQ 0xE
+
+#define BCM_FPGA_REG_LOW BCM_FPGA_REG_FPGA_VERSION
+#define BCM_FPGA_REG_HIGH BCM_FPGA_REG_GPIO_IRQ
+
+#define BCM_RST_BIT_DEVICE 0x0
+#define BCM_RST_BIT_PON_DPLL 0x1
+#define BCM_RST_BIT_PM_DPLL 0x2
+#define BCM_RST_BIT_KT2 0x4
+
+#define SVK4_IDENT_FILE "/etc/svk4"
+
+#include <bcmolt_i2c_devs_addr.h>
+
+#define MAX_CMD_STR_LEN 1024
+
+/* Since the board driver configuration is specific for Linux, there is no point using OS abstraction layer to perform operations like ioctl(). */
+
+static int maple_i2c_fd;
+static int maple_dev_ctrl_fd;
+
+static bcmos_bool bcm_board_is_svk4(void)
+{
+ bcmos_bool is_svk4 = BCMOS_FALSE;
+ FILE *f = fopen(SVK4_IDENT_FILE, "r");
+ if (f)
+ {
+ is_svk4 = BCMOS_TRUE;
+ fclose(f);
+ }
+ return is_svk4;
+}
+
+static bcmos_errno bcm_access_fpga(void)
+{
+ bcmos_errno rc;
+ if (bcm_board_is_svk4())
+ {
+ rc = bcm_board_dev_change(I2C_SW1_I2C_ADDR);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW1_I2C_ADDR) failed\n");
+ rc = bcm_board_switch_write(0x4);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(1) failed\n");
+ }
+ else
+ {
+ rc = bcm_board_dev_change(I2C_SW0_I2C_ADDR);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW0_I2C_ADDR) failed\n");
+ rc = bcm_board_switch_write(1);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(1) failed\n");
+ }
+ rc = bcm_board_dev_change(FPGA_I2C_ADDR);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(FPGA_I2C_ADDR) failed \n");
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_dev_change(uint32_t addr)
+{
+ int rc;
+ maple_i2c_ioctl_param params =
+ {
+ .addr = addr,
+ };
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_CHANGE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_dev_write(uint32_t count, uint32_t addr, uint32_t val)
+{
+ int rc;
+ maple_i2c_ioctl_param params =
+ {
+ .count = count,
+ .addr = addr,
+ .val = val,
+ };
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_dev_read(uint32_t count, uint32_t addr, uint32_t *val)
+{
+ int rc;
+ maple_i2c_ioctl_param params =
+ {
+ .count = count,
+ .addr = addr,
+ };
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_READ, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+ *val = params.val;
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_switch_write(uint32_t val)
+{
+ int rc;
+ maple_i2c_ioctl_param params =
+ {
+ .val = val,
+ };
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_SWITCH_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_switch_read(uint32_t *val)
+{
+ int rc;
+ maple_i2c_ioctl_param params = {};
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_SWITCH_READ, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for maple_i2c_fd\n");
+ *val = params.val;
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_fpga_write(uint32_t addr, uint32_t val)
+{
+ int rc;
+ maple_i2c_ioctl_param params =
+ {
+ .addr = addr,
+ .val = val,
+ };
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_FPGA_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for fpga_write\n");
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_host_event_write(uint32_t val)
+{
+ int rc;
+ dev_ctrl_ioctl_param params =
+ {
+ .event = val,
+ };
+
+ rc = ioctl(maple_dev_ctrl_fd, MAPLE_DEV_CTRL_IOCTL_OP_HOST_EVENT_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for host_event_write\n");
+
+#ifdef CONFIG_ONU_SIM
+ /* Raise an interrupt on ext_irq1 for the embedded side. */
+ rc = bcm_board_fpga_gen_gpio_irq(BCMOLT_EXT_IRQ_EXT_IRQ1);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for bcm_board_fpga_gen_gpio_irq\n");
+#endif
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_pci_debug(uint32_t device, uint32_t command, int32_t start, int32_t howmany, uint32_t *dumpptr)
+{
+ int rc;
+ dev_ctrl_ioctl_param params =
+ {
+ .device = device,
+ .dumpptr = dumpptr,
+ .start_index = start,
+ .howmany = howmany
+ };
+
+ rc = ioctl(maple_dev_ctrl_fd, command, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for dev_ctrl\n");
+
+ return BCM_ERR_OK;
+}
+bcmos_errno bcm_board_fpga_read(uint32_t addr, uint32_t *val)
+{
+ int rc;
+ maple_i2c_ioctl_param params =
+ {
+ .addr = addr,
+ };
+
+ rc = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_FPGA_READ, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rc, BCM_ERR_INTERNAL, "ioctl failed for fpga_read\n");
+ *val = params.val;
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_fpga_reg_read(uint32_t reg, uint32_t *val)
+{
+ bcmos_errno rc;
+
+ if (reg > BCM_FPGA_REG_HIGH)
+ return BCM_ERR_RANGE;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ return bcm_board_fpga_read(reg, val);
+}
+
+bcmos_errno bcm_board_fpga_reg_write(uint32_t reg, uint32_t val)
+{
+ bcmos_errno rc;
+
+ if (reg > BCM_FPGA_REG_HIGH)
+ return BCM_ERR_RANGE;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ return bcm_board_fpga_write(reg, val);
+}
+
+bcmos_errno bcm_board_fpga_version_get(uint32_t *version)
+{
+ bcmos_errno rc;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ return bcm_board_fpga_read(BCM_FPGA_REG_FPGA_VERSION, version);
+}
+
+bcmos_errno bcm_board_fpga_set_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir dir)
+{
+ bcmos_errno rc;
+ uint32_t gpio_dir_mask;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ /* Read-modify-write direction register (we don't want to affect other GPIO's). */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_DIR, &gpio_dir_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ if (dir == BCM_FPGA_GPIO_DIR_INPUT)
+ gpio_dir_mask &= ~(1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+ else
+ gpio_dir_mask |= (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+
+ return bcm_board_fpga_write(BCM_FPGA_REG_GPIO_DIR, gpio_dir_mask);
+}
+
+bcmos_errno bcm_board_fpga_get_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir *dir)
+{
+ bcmos_errno rc;
+ uint32_t gpio_dir_mask;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_DIR, &gpio_dir_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ *dir = (gpio_dir_mask & (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4))) ? BCM_FPGA_GPIO_DIR_OUTPUT : BCM_FPGA_GPIO_DIR_INPUT;
+
+ return rc;
+}
+
+bcmos_errno bcm_board_fpga_write_gpio(bcmolt_gpio_pin gpio_pin, uint32_t val)
+{
+ bcmos_errno rc;
+ uint32_t gpio_write_mask;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ /* Read-modify-write direction register (we don't want to affect other GPIO's). */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_OUTPUT, &gpio_write_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ if (!val)
+ gpio_write_mask &= ~(1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+ else
+ gpio_write_mask |= (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4));
+
+ return bcm_board_fpga_write(BCM_FPGA_REG_GPIO_OUTPUT, gpio_write_mask);
+}
+
+bcmos_errno bcm_board_fpga_read_gpio(bcmolt_gpio_pin gpio_pin, uint32_t *val)
+{
+ bcmos_errno rc;
+ uint32_t gpio_read_mask;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_INPUT, &gpio_read_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ *val = (gpio_read_mask & (1 << (gpio_pin - BCMOLT_GPIO_PIN_PIN4)));
+
+ return rc;
+}
+
+bcmos_errno bcm_board_fpga_gen_gpio_irq(bcmolt_ext_irq ext_irq)
+{
+ bcmos_errno rc;
+ uint32_t gpio_irq_mask;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ /* Read-modify-write direction register (we don't want to affect other GPIO's). */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_GPIO_IRQ, &gpio_irq_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ gpio_irq_mask |= (1 << ext_irq);
+ rc = bcm_board_fpga_write(BCM_FPGA_REG_GPIO_IRQ, gpio_irq_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ bcmos_usleep(1000);
+
+ gpio_irq_mask &= ~(1 << ext_irq);
+ rc = bcm_board_fpga_write(BCM_FPGA_REG_GPIO_IRQ, gpio_irq_mask);
+
+ return rc;
+}
+
+bcmos_errno bcm_board_trx_present(uint8_t pon)
+{
+ bcmos_errno rc;
+ uint32_t trx_absence_mask;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ /* Check that the transceiver is present (plugged in). For ONU simulator, we allow working without transceivers. */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_TRX_IS_PRESENT, &trx_absence_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ if (trx_absence_mask & (1 << pon))
+ {
+ /* The transceiver is absent. */
+ return BCM_ERR_NODEV;
+ }
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_trx_enable(uint8_t pon, bcmos_bool is_enabled)
+{
+#ifdef CONFIG_ONU_SIM
+ static uint32_t trx_disable_mask = 0xFFFFFFFF;
+
+ /* Keep track of which TRXs are logically enabled. */
+ if (is_enabled)
+ trx_disable_mask &= ~(1 << pon);
+ else
+ trx_disable_mask |= (1 << pon);
+
+ return bcm_board_host_event_write(trx_disable_mask);
+#else
+ uint32_t trx_disable_mask;
+ uint32_t trx_absence_mask;
+
+ bcmos_errno rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ /* Check that the transceiver is present (plugged in). */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_TRX_IS_PRESENT, &trx_absence_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ if (trx_absence_mask & (1 << pon))
+ {
+ /* The transceiver is absent. */
+ return BCM_ERR_NODEV;
+ }
+
+ /* Read-modify-write transceiver disable mask (we don't want to affect other PON's). */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_TRX_ENABLE, &trx_disable_mask);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ if (is_enabled == BCMOS_TRUE)
+ trx_disable_mask &= ~(1 << pon);
+ else
+ trx_disable_mask |= (1 << pon);
+
+ rc = bcm_board_fpga_write(BCM_FPGA_REG_TRX_ENABLE, trx_disable_mask);
+ if (rc != BCM_ERR_OK)
+ return BCM_ERR_INTERNAL;
+ return bcm_board_host_event_write(trx_disable_mask);
+#endif
+}
+
+static bcmos_errno bcm_board_config_reset_value(uint32_t rst_bit, bcmos_bool is_on)
+{
+ bcmos_errno rc;
+ uint32_t reset_values;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ /* Read-modify-write so we can set only the relevant bit to 0 */
+ rc = bcm_board_fpga_read(BCM_FPGA_REG_RESETS, &reset_values);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ if (is_on == BCMOS_TRUE)
+ reset_values |= 1 << rst_bit;
+ else
+ reset_values &= ~(1 << rst_bit);
+
+ return bcm_board_fpga_write(BCM_FPGA_REG_RESETS, reset_values);
+}
+
+static bcmos_errno device_disconnect(void)
+{
+ bcmolt_device_key key = {};
+ bcmolt_device_cfg dev_cfg;
+ bcmolt_device_disconnect dev_disconnect;
+ bcmos_errno rc;
+
+ BCMOLT_CFG_INIT(&dev_cfg, device, key);
+ BCMOLT_CFG_PROP_GET(&dev_cfg, device, state);
+ rc = bcmolt_cfg_get(0, &dev_cfg.hdr);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ if (dev_cfg.data.state != BCMOLT_DEVICE_STATE_DISCONNECTED)
+ {
+ BCMOLT_OPER_INIT(&dev_disconnect, device, disconnect, key);
+ return bcmolt_oper_submit(0, &dev_disconnect.hdr);
+ }
+ else
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_device_reset(void)
+{
+ bcmos_errno rc;
+
+ rc = device_disconnect();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ rc = bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_FALSE);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ return bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_TRUE);
+}
+
+/* Device on keeps the reset bit on active high */
+bcmos_errno bcm_board_device_on(void)
+{
+ return bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_TRUE);
+}
+
+/* Device off keeps the reset bit on active low */
+bcmos_errno bcm_board_device_off(void)
+{
+ bcmos_errno rc;
+
+ rc = device_disconnect();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ return bcm_board_config_reset_value(BCM_RST_BIT_DEVICE, BCMOS_FALSE);
+}
+
+/* Katana2 Device on keeps the reset bit on active high */
+bcmos_errno bcm_board_kt2_device_on(void)
+{
+ /* take the KT2 out of reset */
+ return bcm_board_config_reset_value(BCM_RST_BIT_KT2, BCMOS_TRUE);
+}
+
+/* Device off keeps the reset bit on active low */
+bcmos_errno bcm_board_kt2_device_off(void)
+{
+ return bcm_board_config_reset_value(BCM_RST_BIT_KT2, BCMOS_FALSE);
+}
+
+static bcmos_errno bcm_access_dpll(void)
+{
+ bcmos_errno rc;
+
+ if (bcm_board_is_svk4())
+ {
+ rc = bcm_board_dev_change(I2C_SW1_I2C_ADDR);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW1_I2C_ADDR) failed\n");
+ rc = bcm_board_switch_write(0x20);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(0x20) failed\n");
+ }
+ else
+ {
+ rc = bcm_board_dev_change(I2C_SW0_I2C_ADDR);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(I2C_SW0_I2C_ADDR) failed\n");
+ rc = bcm_board_switch_write(2);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_write(2) failed\n");
+ }
+
+ rc = bcm_board_dev_change(PON_DPLL_I2C_ADDR);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_change(PON_DPLL_I2C_ADDR) failed \n");
+
+ return rc;
+}
+
+static int bcm_board_set_page_dpll(uint32_t page)
+{
+ int rcioctl;
+ maple_i2c_ioctl_param params =
+ {
+ .count = 8,
+ .addr = 1,
+ .val = page,
+ };
+
+ rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl write change page failed\n");
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_read_dpll(uint32_t page, uint32_t reg, uint32_t *val)
+{
+ bcmos_errno rc;
+ int rcioctl;
+ maple_i2c_ioctl_param params =
+ {
+ .count = 8,
+ .addr = reg,
+ .val = 0,
+ };
+
+ rc = bcm_access_dpll();
+ bcm_board_set_page_dpll(page);
+ rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_READ, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl read failed for maple_i2c_fd\n");
+ *val = params.val;
+
+ return rc;
+}
+
+bcmos_errno bcm_board_write_dpll(uint32_t page, uint32_t reg, uint32_t val)
+{
+ bcmos_errno rc;
+ int rcioctl;
+ maple_i2c_ioctl_param params =
+ {
+ .count = 8,
+ .addr = reg,
+ .val = val,
+ };
+
+ rc = bcm_access_dpll();
+ bcm_board_set_page_dpll(page);
+ rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl write failed for maple_i2c_fd\n");
+
+ return rc;
+}
+
+static bcmos_errno bcm_board_load_dpll(dpll_command *commands, int cmdlen)
+{
+ int rcioctl,i;
+ bcmos_errno rc;
+ uint8_t previous_page = 0;
+
+ maple_i2c_ioctl_param params =
+ {
+ .count = 8,
+ .addr = 0,
+ .val = 0,
+ };
+
+ rc = bcm_access_dpll();
+ for (i=0; i < cmdlen; i++)
+ {
+ if (commands[i].page != previous_page)
+ {
+ bcm_board_set_page_dpll(commands[i].page);
+ previous_page = commands[i].page;
+ }
+ params.addr = commands[i].reg;
+ params.val = commands[i].data;
+ rcioctl = ioctl(maple_i2c_fd, MAPLE_I2C_IOCTL_OP_DEV_WRITE, ¶ms);
+ BCMOS_TRACE_CHECK_RETURN(rcioctl, BCM_ERR_INTERNAL, "ioctl write data page failed\n");
+ }
+ return rc;
+}
+bcmos_errno bcm_board_burn_pon_dpll(bcm_dpll_users dpll_dev)
+{
+ switch(dpll_dev)
+ {
+ case GPON_DPLL:
+ return bcm_board_load_dpll(gpon_dpll_table,sizeof(gpon_dpll_table)/sizeof(dpll_command));
+ break;
+ case EPON_DPLL:
+ return bcm_board_load_dpll(epon_dpll_table,sizeof(epon_dpll_table)/sizeof(dpll_command));
+ break;
+ case GPON_SYNCE:
+ return bcm_board_load_dpll(gpon_synce_dpll_table,sizeof(gpon_synce_dpll_table)/sizeof(dpll_command));
+ break;
+ default:
+ break;
+ }
+
+ return BCM_ERR_PARM;
+}
+
+bcmos_errno bcm_board_init(void)
+{
+ maple_dev_ctrl_fd = open("/dev/maple_dev_ctrl", O_RDWR);
+ BCMOS_TRACE_CHECK_RETURN(maple_dev_ctrl_fd < 0, errno, "maple_dev_ctrl_fd open failed\n");
+
+ maple_i2c_fd = open("/dev/maple_i2c", O_RDWR);
+ BCMOS_TRACE_CHECK_RETURN(maple_i2c_fd < 0, errno, "maple_i2c_fd open failed\n");
+
+#ifdef CONFIG_ONU_SIM
+ /* If the ONU sim is running, always leave all transceivers physically disabled. */
+ bcmos_errno rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ rc = bcm_board_fpga_write(BCM_FPGA_REG_TRX_ENABLE, 0xFFFFFFFF);
+ if (rc != BCM_ERR_OK)
+ return BCM_ERR_INTERNAL;
+#endif
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_get_board_id(bcm_board_svk_board_id * board_id)
+{
+ bcmos_errno rc;
+ uint32_t val;
+
+ rc = bcm_access_fpga();
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ rc = bcm_board_fpga_read(0x1, &val);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+
+ *board_id = val & 0x7;
+ return BCM_ERR_OK;
+}
+
+void bcm_board_uninit(void)
+{
+ close(maple_i2c_fd);
+ maple_i2c_fd = 0;
+
+ close(maple_dev_ctrl_fd);
+ maple_dev_ctrl_fd = -1;
+}
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.h b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.h
new file mode 100644
index 0000000..3a58eba
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board.h
@@ -0,0 +1,100 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software. The special exception does not apply to any modifications
+ of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+#ifndef _BCMOLT_BOARD_H_
+#define _BCMOLT_BOARD_H_
+
+#include <bcmos_system.h>
+#include <bcmolt_model_types.h>
+
+typedef enum
+{
+ SVK_1 = 0x7, /* SVK #1 - BCM968620S: all PON flavors supported, SFP+ */
+ SVK_2_XG = 0x6, /* SVK #2 - BCM968620XG: XGPON */
+ SVK_2_XE = 0x5, /* SVK #2 - BCM968620XE: 10G EPON */
+ SVK_3 = 0x4, /* SVK #3 - BCM968620K: all PON flavors supported, XFP */
+} bcm_board_svk_board_id;
+
+bcmos_errno bcm_board_dev_change(uint32_t addr);
+bcmos_errno bcm_board_dev_write(uint32_t count, uint32_t addr, uint32_t val);
+bcmos_errno bcm_board_dev_read(uint32_t count, uint32_t addr, uint32_t *val);
+bcmos_errno bcm_board_switch_write(uint32_t val);
+bcmos_errno bcm_board_switch_read(uint32_t *val);
+bcmos_errno bcm_board_fpga_write(uint32_t addr, uint32_t val);
+bcmos_errno bcm_board_fpga_read(uint32_t addr, uint32_t *val);
+bcmos_errno bcm_board_host_event_write(uint32_t val);
+
+bcmos_errno bcm_board_fpga_version_get(uint32_t *version);
+
+/* FPGA GPIO access */
+typedef enum
+{
+ BCM_FPGA_GPIO_DIR_INPUT,
+ BCM_FPGA_GPIO_DIR_OUTPUT,
+} bcm_fpga_gpio_dir;
+
+typedef enum
+{
+ GPON_DPLL,
+ EPON_DPLL,
+ GPON_SYNCE
+} bcm_dpll_users;
+
+typedef struct
+{
+ uint8_t page;
+ uint8_t reg;
+ uint8_t data;
+} dpll_command;
+
+bcmos_errno bcm_board_fpga_set_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir dir);
+bcmos_errno bcm_board_fpga_get_gpio_dir(bcmolt_gpio_pin gpio_pin, bcm_fpga_gpio_dir *dir);
+bcmos_errno bcm_board_fpga_write_gpio(bcmolt_gpio_pin gpio_pin, uint32_t val);
+bcmos_errno bcm_board_fpga_read_gpio(bcmolt_gpio_pin gpio_pin, uint32_t *val);
+bcmos_errno bcm_board_fpga_gen_gpio_irq(bcmolt_ext_irq ext_irq);
+
+bcmos_errno bcm_board_trx_enable(uint8_t pon, bcmos_bool is_enabled);
+bcmos_errno bcm_board_trx_present(uint8_t pon);
+bcmos_errno bcm_board_device_reset(void);
+bcmos_errno bcm_board_device_on(void);
+bcmos_errno bcm_board_device_off(void);
+bcmos_errno bcm_board_kt2_device_on(void);
+bcmos_errno bcm_board_kt2_device_off(void);
+bcmos_errno bcm_board_get_board_id(bcm_board_svk_board_id * board_id);
+bcmos_errno bcm_board_fpga_reg_read(uint32_t reg, uint32_t *val);
+bcmos_errno bcm_board_fpga_reg_write(uint32_t reg, uint32_t val);
+bcmos_errno bcm_board_pci_debug(uint32_t device, uint32_t command, int32_t start, int32_t howmany, uint32_t *dumpptr);
+bcmos_errno bcm_board_burn_pon_dpll(bcm_dpll_users dpll_dev);
+bcmos_errno bcm_board_write_dpll(uint32_t page, uint32_t reg, uint32_t val);
+bcmos_errno bcm_board_read_dpll(uint32_t page, uint32_t reg, uint32_t *val);
+
+bcmos_errno bcm_board_init(void);
+void bcm_board_uninit(void);
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.c b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.c
new file mode 100644
index 0000000..e7b59fa
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.c
@@ -0,0 +1,581 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software. The special exception does not apply to any modifications
+ of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#include <bcmcli.h>
+#include "bcmolt_board.h"
+#include "bcmolt_board_cli.h"
+#include <arpa/inet.h>
+
+#define BCM_I2C_DEV_ADDR_START static bcmcli_enum_val bcm_i2c_dev_addr_table[] = {
+#define BCM_I2C_DEV_ADDR(name, desc, val) {desc, val},
+#define BCM_I2C_DEV_ADDR_END BCMCLI_ENUM_LAST};
+#include <bcmolt_i2c_devs_addr.h>
+
+static bcmos_errno bcm_board_cli_dev_change(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t addr = bcmcli_find_named_parm(session, "dev")->value.unumber;
+
+ return bcm_board_dev_change(addr);
+}
+
+static bcmos_errno bcm_board_cli_dev_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t count = bcmcli_find_named_parm(session, "width")->value.unumber;
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+ switch (count)
+ {
+ case 8:
+ case 16:
+ case 32:
+ break;
+ default:
+ bcmcli_session_print(session, "Count can be 8|16|32\n");
+ return BCM_ERR_PARM;
+ }
+ return bcm_board_dev_write(count, addr, val);
+}
+
+static bcmos_errno bcm_board_cli_dev_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t count = bcmcli_find_named_parm(session, "width")->value.unumber;
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val;
+ bcmos_errno rc;
+
+ switch (count)
+ {
+ case 8:
+ case 16:
+ case 32:
+ break;
+ default:
+ bcmcli_session_print(session, "Count can be 8|16|32\n");
+ return BCM_ERR_PARM;
+ }
+ rc = bcm_board_dev_read(count, addr, &val);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dev_read() failed\n");
+ bcmcli_session_print(session, "0x%x\n", val);
+
+ return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_switch_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+ return bcm_board_switch_write(val);
+}
+
+static bcmos_errno bcm_board_cli_switch_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t val;
+ bcmos_errno rc;
+
+ rc = bcm_board_switch_read(&val);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_switch_read() failed\n");
+ bcmcli_session_print(session, "0x%x\n", val);
+
+ return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_fpga_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+ return bcm_board_fpga_write(addr, val);
+}
+
+static bcmos_errno bcm_board_cli_fpga_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val;
+ bcmos_errno rc;
+
+ rc = bcm_board_fpga_read(addr, &val);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_fpga_read() failed\n");
+ bcmcli_session_print(session, "0x%x\n", val);
+
+ return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_fpga_version(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t version;
+ bcmos_errno rc;
+
+ rc = bcm_board_fpga_version_get(&version);
+ bcmcli_session_print(session, "0x%x\n", version);
+ return rc;
+}
+
+static bcmos_errno bcm_board_cli_fpga_set_gpio_dir(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+ bcm_fpga_gpio_dir dir = bcmcli_find_named_parm(session, "dir")->value.unumber;
+
+ return bcm_board_fpga_set_gpio_dir(gpio_pin, dir);
+}
+
+static bcmos_errno bcm_board_cli_fpga_get_gpio_dir(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+ bcm_fpga_gpio_dir dir;
+ bcmos_errno rc;
+
+ rc = bcm_board_fpga_get_gpio_dir(gpio_pin, &dir);
+ bcmcli_session_print(session, "%s\n", dir == BCM_FPGA_GPIO_DIR_INPUT ? "input" : "output");
+ return rc;
+}
+
+static bcmos_errno bcm_board_cli_fpga_write_gpio(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+ uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+ return bcm_board_fpga_write_gpio(gpio_pin, val);
+}
+
+static bcmos_errno bcm_board_cli_fpga_read_gpio(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ bcmolt_gpio_pin gpio_pin = bcmcli_find_named_parm(session, "gpio_pin")->value.unumber;
+ uint32_t val;
+ bcmos_errno rc;
+
+ rc = bcm_board_fpga_read_gpio(gpio_pin, &val);
+ bcmcli_session_print(session, "0x%x\n", val);
+ return rc;
+}
+
+static bcmos_errno bcm_board_cli_fpga_gen_gpio_irq(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ bcmolt_ext_irq ext_irq = bcmcli_find_named_parm(session, "irq")->value.unumber;
+
+ return bcm_board_fpga_gen_gpio_irq(ext_irq);
+}
+
+static bcmos_errno bcm_board_cli_trx_enable(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint8_t pon_id = bcmcli_find_named_parm(session, "pon_id")->value.unumber;
+
+ return bcm_board_trx_enable(pon_id, BCMOS_TRUE);
+}
+
+static bcmos_errno bcm_board_cli_trx_disable(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint8_t pon_id = bcmcli_find_named_parm(session, "pon_id")->value.unumber;
+
+ return bcm_board_trx_enable(pon_id, BCMOS_FALSE);
+}
+
+static bcmos_errno bcm_board_cli_device_reset(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ return bcm_board_device_reset();
+}
+
+static bcmos_errno bcm_board_cli_device_on(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ return bcm_board_device_on();
+}
+
+static bcmos_errno bcm_board_cli_device_off(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ return bcm_board_device_off();
+}
+
+static bcmos_errno bcm_board_cli_kt2_on(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ return bcm_board_kt2_device_on();
+}
+
+static bcmos_errno bcm_board_cli_kt2_off(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ return bcm_board_kt2_device_off();
+}
+
+static bcmos_errno bcm_board_cli_fpga_reg_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val;
+ bcmos_errno rc;
+
+ rc = bcm_board_fpga_reg_read(addr, &val);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_fpga_reg_read() failed\n");
+ bcmcli_session_print(session, "0x%x\n", val);
+
+ return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_fpga_reg_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+ return bcm_board_fpga_reg_write(addr, val);
+}
+
+static bcmos_errno bcm_board_cli_burn_dpll(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ bcmos_errno rc;
+
+ uint32_t dev = bcmcli_find_named_parm(session, "device")->value.unumber;
+ rc = bcm_board_burn_pon_dpll(dev);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_burn_pon_dpll() failed\n");
+
+ return BCM_ERR_OK;
+}
+
+static bcmos_errno bcm_board_cli_dpll_write(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t page = bcmcli_find_named_parm(session, "page")->value.unumber;
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val = bcmcli_find_named_parm(session, "val")->value.unumber;
+
+ return bcm_board_write_dpll(page, addr, val);
+}
+
+static bcmos_errno bcm_board_cli_dpll_read(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ uint32_t page = bcmcli_find_named_parm(session, "page")->value.unumber;
+ uint32_t addr = bcmcli_find_named_parm(session, "addr")->value.unumber;
+ uint32_t val;
+ bcmos_errno rc;
+
+ rc = bcm_board_read_dpll(page, addr, &val);
+ BCMOS_TRACE_CHECK_RETURN(rc, rc, "bcm_board_dpll_read() failed\n");
+ bcmcli_session_print(session, "0x%x\n", val);
+
+ return BCM_ERR_OK;
+}
+
+/* LUK_MAX_DATA_SIZE (2*1024) */
+#define SWITCH_RECEIVE_BUFFER_LENGTH (2*1024)
+static int switch_socket = -1;
+static char *switch_buffer = NULL;
+static bcmos_bool switch_first_connection = BCMOS_TRUE;
+
+static void switch_response(bcmcli_session *session)
+{
+ int len;
+ char *prompt = NULL;
+
+ while (1)
+ {
+ len = read(switch_socket, switch_buffer, SWITCH_RECEIVE_BUFFER_LENGTH-1);
+ if (len > 0)
+ {
+ switch_buffer[len] = '\0';
+ bcmcli_print(session, "%s", switch_buffer);
+ prompt = strstr(switch_buffer, "BCM");
+ while (prompt)
+ {
+ len = strlen(prompt);
+ if (len >= 6)
+ {
+ if ((prompt[3] == '>') || ((prompt[3] == '.') && (prompt[5] == '>')))
+ return;
+ }
+ else if (len >= 4)
+ {
+ if (prompt[3] == '>')
+ return;
+ }
+ prompt = strstr(&prompt[2], "BCM");
+ }
+ }
+ else
+ break;
+ }
+}
+
+static bcmos_errno kt2_conn(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ struct sockaddr_in server;
+
+ if (switch_socket != -1)
+ {
+ bcmcli_print(session, "A connection already exists\n");
+ return BCM_ERR_ALREADY;
+ }
+
+ switch_buffer = bcmos_alloc(SWITCH_RECEIVE_BUFFER_LENGTH);
+ if (!switch_buffer)
+ {
+ bcmcli_print(session, "Failed to allocate buffer\n");
+ return BCM_ERR_NOMEM;
+ }
+ memset((void *)&server, 0, sizeof(server));
+ server.sin_family = AF_INET;
+ server.sin_port = htons(parm[0].value.number);
+ server.sin_addr.s_addr = inet_addr("127.0.0.1");
+ switch_socket = socket(AF_INET, SOCK_STREAM, 0);
+ if (switch_socket < 0)
+ {
+ bcmcli_print(session, "Can't open client socket\n");
+ goto exit;
+ }
+ if (connect(switch_socket, (struct sockaddr *)&server, sizeof(server)) == -1)
+ {
+ close(switch_socket);
+ bcmcli_print(session, "Failed to connect\n");
+ goto exit;
+ }
+ if (switch_first_connection)
+ {
+ switch_first_connection = BCMOS_FALSE;
+ switch_response(session);
+ }
+
+ return BCM_ERR_OK;
+
+exit:
+ bcmos_free(switch_buffer);
+ return BCM_ERR_COMM_FAIL;
+}
+
+static bcmos_errno kt2_disconn(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ if (switch_socket != -1)
+ {
+ bcmcli_print(session, "Send 'exit'\n");
+ if (write(switch_socket, "exit\r", strlen("exit\r")) < 0)
+ bcmcli_print(session, "Send 'exit' to switch failed\n");
+ fsync(switch_socket);
+ }
+ bcmos_usleep(1000);
+ if (switch_socket != -1)
+ close(switch_socket);
+ if (switch_buffer)
+ bcmos_free(switch_buffer);
+ /* set socket and buffer with initial values */
+ switch_socket = -1;
+ switch_buffer = NULL;
+
+ return BCM_ERR_OK;
+}
+
+static bcmos_errno kt2_cmd(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms)
+{
+ int len, sent_len;
+ char *str;
+
+ if ((switch_socket == -1) || (!switch_buffer))
+ {
+ bcmcli_print(session, "Connection or buffer do not exist\n");
+ return BCM_ERR_NORES;
+ }
+ /* switch user space application receives thru _fd_input_cb and
+ send to kernel thru _kernel_proxy_output_cb */
+ len = (int)strlen(parm[0].value.string);
+ {
+ /* dirty - just to avoid error : cast discards '__attribute__((const))' qualifier if useing strcat */
+ unsigned long strp = (unsigned long)&parm[0].value.string;
+ str = *(char **)strp;
+ }
+ str[len++] = '\r';
+ str[len] = '\0';
+ sent_len = 0;
+ do
+ {
+ sent_len = write(switch_socket, str + sent_len , len - sent_len);
+ if (sent_len == -1 || ((sent_len == 0) && errno))
+ {
+ bcmcli_print(session, "Send command to switch failed (write to socket error: %d)\n", errno);
+ return BCM_ERR_COMM_FAIL;
+ }
+ fsync(switch_socket);
+ } while(len - sent_len);
+ /* switch kernel send thru _kernel_proxy_input_cb
+ to switch user space application thru _fd_outout_cb */
+ switch_response(session);
+
+ return BCM_ERR_OK;
+}
+
+bcmos_errno bcm_board_cli_init(bcmcli_entry *top_dir)
+{
+ bcmcli_entry *board_dir, *i2c_dir;
+ bcmos_errno rc;
+ bcm_board_svk_board_id board_id;
+ bcmcli_entry *dir;
+ static bcmcli_enum_val fpga_gpio_pin_table[] =
+ {
+ {"pin4", BCMOLT_GPIO_PIN_PIN4},
+ {"pin5", BCMOLT_GPIO_PIN_PIN5},
+ {"pin6", BCMOLT_GPIO_PIN_PIN6},
+ {"pin7", BCMOLT_GPIO_PIN_PIN7},
+ {"pin8", BCMOLT_GPIO_PIN_PIN8},
+ {"pin9", BCMOLT_GPIO_PIN_PIN9},
+ {"pin10", BCMOLT_GPIO_PIN_PIN10},
+ {"pin11", BCMOLT_GPIO_PIN_PIN11},
+ {"pin12", BCMOLT_GPIO_PIN_PIN12},
+ {"pin13", BCMOLT_GPIO_PIN_PIN13},
+ {"pin14", BCMOLT_GPIO_PIN_PIN14},
+ {"pin15", BCMOLT_GPIO_PIN_PIN15},
+ {"pin16", BCMOLT_GPIO_PIN_PIN16},
+ {"pin17", BCMOLT_GPIO_PIN_PIN17},
+ {"pin18", BCMOLT_GPIO_PIN_PIN18},
+ {"pin19", BCMOLT_GPIO_PIN_PIN19},
+ {"pin20", BCMOLT_GPIO_PIN_PIN20},
+ {"pin21", BCMOLT_GPIO_PIN_PIN21},
+ {"pin22", BCMOLT_GPIO_PIN_PIN22},
+ {"pin23", BCMOLT_GPIO_PIN_PIN23},
+ {"pin24", BCMOLT_GPIO_PIN_PIN24},
+ {"pin25", BCMOLT_GPIO_PIN_PIN25},
+ {"pin26", BCMOLT_GPIO_PIN_PIN26},
+ {"pin27", BCMOLT_GPIO_PIN_PIN27},
+ {"pin28", BCMOLT_GPIO_PIN_PIN28},
+ {"pin29", BCMOLT_GPIO_PIN_PIN29},
+ {"pin30", BCMOLT_GPIO_PIN_PIN30},
+ {"pin31", BCMOLT_GPIO_PIN_PIN31},
+ BCMCLI_ENUM_LAST
+ };
+ static bcmcli_enum_val fpga_ext_irq_table[] =
+ {
+ {"ext_irq0", BCMOLT_EXT_IRQ_EXT_IRQ0},
+ {"ext_irq1", BCMOLT_EXT_IRQ_EXT_IRQ1},
+ {"ext_irq2", BCMOLT_EXT_IRQ_EXT_IRQ2},
+ {"ext_irq3", BCMOLT_EXT_IRQ_EXT_IRQ3},
+ {"ext_irq4", BCMOLT_EXT_IRQ_EXT_IRQ4},
+ {"ext_irq5", BCMOLT_EXT_IRQ_EXT_IRQ5},
+ BCMCLI_ENUM_LAST
+ };
+
+ static bcmcli_enum_val fpga_gpio_dir_table[] =
+ {
+ {"input", BCM_FPGA_GPIO_DIR_INPUT},
+ {"output", BCM_FPGA_GPIO_DIR_OUTPUT},
+ BCMCLI_ENUM_LAST
+ };
+
+ static bcmcli_enum_val dpll_devices[] = {
+ { .name="gpon", .val=GPON_DPLL},
+ { .name="epon", .val=EPON_DPLL},
+ { .name="synce", .val=GPON_SYNCE},
+ BCMCLI_ENUM_LAST
+ };
+
+ board_dir = bcmcli_dir_add(top_dir, "board", "Board", BCMCLI_ACCESS_GUEST, NULL);
+ BCMOS_CHECK_RETURN_ERROR(!board_dir, BCM_ERR_INTERNAL);
+
+ i2c_dir = bcmcli_dir_add(board_dir, "i2c", "i2c", BCMCLI_ACCESS_GUEST, NULL);
+ BCMOS_CHECK_RETURN_ERROR(!i2c_dir, BCM_ERR_INTERNAL);
+
+ BCMCLI_MAKE_CMD(i2c_dir, "dev_change", "Change current device", bcm_board_cli_dev_change,
+ BCMCLI_MAKE_PARM_ENUM("dev", "device", bcm_i2c_dev_addr_table, 0));
+
+ BCMCLI_MAKE_CMD(i2c_dir, "dev_write", "Write to current i2c device", bcm_board_cli_dev_write,
+ BCMCLI_MAKE_PARM("width", "Width of register in bits (8|16|32)", BCMCLI_PARM_NUMBER, 0),
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+ BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD(i2c_dir, "dev_read", "Read from current i2c device", bcm_board_cli_dev_read,
+ BCMCLI_MAKE_PARM("width", "Width of register in bits (8|16|32)", BCMCLI_PARM_NUMBER, 0),
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD(i2c_dir, "switch_write", "Write to switch", bcm_board_cli_switch_write,
+ BCMCLI_MAKE_PARM_RANGE("val", "value", BCMCLI_PARM_HEX, 0, 0, UCHAR_MAX));
+
+ BCMCLI_MAKE_CMD_NOPARM(i2c_dir, "switch_read", "Read from switch", bcm_board_cli_switch_read);
+
+ BCMCLI_MAKE_CMD(i2c_dir, "fpga_write", "Write to FPGA", bcm_board_cli_fpga_write,
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+ BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD(i2c_dir, "fpga_read", "Read from FPGA", bcm_board_cli_fpga_read,
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD_NOPARM(board_dir, "fpga_version", "FPGA version", bcm_board_cli_fpga_version);
+
+ BCMCLI_MAKE_CMD(board_dir, "fpga_set_gpio_dir", "Set GPIO direction", bcm_board_cli_fpga_set_gpio_dir,
+ BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0),
+ BCMCLI_MAKE_PARM_ENUM("dir", "Direction", fpga_gpio_dir_table, 0));
+ BCMCLI_MAKE_CMD(board_dir, "fpga_get_gpio_dir", "Get GPIO direction", bcm_board_cli_fpga_get_gpio_dir,
+ BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0));
+ BCMCLI_MAKE_CMD(board_dir, "fpga_write_gpio", "Write to GPIO pin", bcm_board_cli_fpga_write_gpio,
+ BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0),
+ BCMCLI_MAKE_PARM("val", "Value", BCMCLI_PARM_HEX, 0));
+ BCMCLI_MAKE_CMD(board_dir, "fpga_read_gpio", "Read from GPIO pin", bcm_board_cli_fpga_read_gpio,
+ BCMCLI_MAKE_PARM_ENUM("gpio_pin", "GPIO pin", fpga_gpio_pin_table, 0));
+ BCMCLI_MAKE_CMD(board_dir, "fpga_gen_irq", "Generate GPIO IRQ", bcm_board_cli_fpga_gen_gpio_irq,
+ BCMCLI_MAKE_PARM_ENUM("irq", "IRQ", fpga_ext_irq_table, 0));
+
+ BCMCLI_MAKE_CMD(board_dir, "trx_enable", "Enable transceiver", bcm_board_cli_trx_enable,
+ BCMCLI_MAKE_PARM("pon_id", "pon_id", BCMCLI_PARM_UDECIMAL, 0));
+
+ BCMCLI_MAKE_CMD(board_dir, "trx_disable", "Disable transceiver", bcm_board_cli_trx_disable,
+ BCMCLI_MAKE_PARM("pon_id", "pon_id", BCMCLI_PARM_UDECIMAL, 0));
+
+ BCMCLI_MAKE_CMD_NOPARM(board_dir, "device_reset", "Reset the device - clears the reset bit and then set it on", bcm_board_cli_device_reset);
+
+ BCMCLI_MAKE_CMD_NOPARM(board_dir, "device_on", "Keeps the device with reset bit on", bcm_board_cli_device_on);
+
+ BCMCLI_MAKE_CMD_NOPARM(board_dir, "device_off", "Keeps the device with reset bit off", bcm_board_cli_device_off);
+
+ BCMCLI_MAKE_CMD(board_dir, "fpga_reg_read", "Read data from an FPGA register", bcm_board_cli_fpga_reg_read,
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD(board_dir, "fpga_reg_write", "Write data to an FPGA register", bcm_board_cli_fpga_reg_write,
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+ BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD(board_dir, "dpll", "Burn DPLL", bcm_board_cli_burn_dpll,
+ BCMCLI_MAKE_PARM_ENUM("device", "Device", dpll_devices, 0));
+
+ BCMCLI_MAKE_CMD(board_dir, "dpll_write", "Write to DPLL", bcm_board_cli_dpll_write,
+ BCMCLI_MAKE_PARM("page", "page", BCMCLI_PARM_HEX, 0),
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0),
+ BCMCLI_MAKE_PARM("val", "value", BCMCLI_PARM_HEX, 0));
+
+ BCMCLI_MAKE_CMD(board_dir, "dpll_read", "Read from DPLL", bcm_board_cli_dpll_read,
+ BCMCLI_MAKE_PARM("page", "page", BCMCLI_PARM_HEX, 0),
+ BCMCLI_MAKE_PARM("addr", "address", BCMCLI_PARM_HEX, 0));
+
+ rc = bcm_board_get_board_id(&board_id);
+ BCMOS_CHECK_RETURN(rc, rc, rc);
+ /* check if the board is SVK#3 */
+ if (board_id == SVK_3)
+ {
+ BCMCLI_MAKE_CMD_NOPARM(board_dir, "kt2_on", "Keeps the Katana2 with reset bit on", bcm_board_cli_kt2_on);
+
+ BCMCLI_MAKE_CMD_NOPARM(board_dir, "kt2_off", "Keeps the Katana2 with reset bit off", bcm_board_cli_kt2_off);
+
+ dir = bcmcli_dir_add(board_dir, "switch", "Switch", BCMCLI_ACCESS_ADMIN, NULL);
+ BCMOS_CHECK_RETURN_ERROR(!dir, BCM_ERR_NOMEM);
+ BCMCLI_MAKE_CMD(dir, "conn", "connect to switch daemon", kt2_conn,
+ BCMCLI_MAKE_PARM("port", "connection port on localhost", BCMCLI_PARM_NUMBER, 0));
+ BCMCLI_MAKE_CMD_NOPARM(dir, "disconn", "disconnect from switch daemon", kt2_disconn);
+ BCMCLI_MAKE_CMD(dir, "cmd", "command to switch - string between quotes", kt2_cmd,
+ BCMCLI_MAKE_PARM("", "", BCMCLI_PARM_STRING, 0));
+ }
+ return BCM_ERR_OK;
+}
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.h b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.h
new file mode 100644
index 0000000..91a904a
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_board_cli.h
@@ -0,0 +1,39 @@
+/*
+<:copyright-BRCM:2016:DUAL/GPL:standard
+
+ Broadcom Proprietary and Confidential.(c) 2016 Broadcom
+ All Rights Reserved
+
+Unless you and Broadcom execute a separate written software license
+agreement governing use of this software, this software is licensed
+to you under the terms of the GNU General Public License version 2
+(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
+with the following added to such license:
+
+ As a special exception, the copyright holders of this software give
+ you permission to link this software with independent modules, and
+ to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent
+ module, the terms and conditions of the license of that module.
+ An independent module is a module which is not derived from this
+ software. The special exception does not apply to any modifications
+ of the software.
+
+Not withstanding the above, under no circumstances may you combine
+this software in any way with any other Broadcom software provided
+under a license other than the GPL, without Broadcom's express prior
+written consent.
+
+:>
+ */
+
+#ifndef _BCMOLT_BOARD_CLI_H_
+#define _BCMOLT_BOARD_CLI_H_
+
+#include <bcmos_system.h>
+#include <bcmcli.h>
+
+bcmos_errno bcm_board_cli_init(bcmcli_entry *top_dir);
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/bcmolt_dpll_table.h b/bcm68620_release/release/host_customized/board/wrx/bcmolt_dpll_table.h
new file mode 100755
index 0000000..a7d610e
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/bcmolt_dpll_table.h
@@ -0,0 +1,1144 @@
+#ifndef _BCMOLT_DPLL_TABLE_H_
+#define _BCMOLT_DPLL_TABLE_H_
+
+/* auto generated loading files */
+
+static dpll_command gpon_dpll_table[] =
+{
+ {0x0B,0x24,0xD8},
+ {0x0B,0x25,0x00},
+ {0x00,0x0B,0x68},
+ {0x00,0x16,0x02},
+ {0x00,0x17,0x1C},
+ {0x00,0x18,0xEE},
+ {0x00,0x19,0xDD},
+ {0x00,0x1A,0xDF},
+ {0x00,0x2B,0x02},
+ {0x00,0x2C,0x01},
+ {0x00,0x2D,0x01},
+ {0x00,0x2E,0x6F},
+ {0x00,0x2F,0x00},
+ {0x00,0x30,0x00},
+ {0x00,0x31,0x00},
+ {0x00,0x32,0x00},
+ {0x00,0x33,0x00},
+ {0x00,0x34,0x00},
+ {0x00,0x35,0x00},
+ {0x00,0x36,0x6F},
+ {0x00,0x37,0x00},
+ {0x00,0x38,0x00},
+ {0x00,0x39,0x00},
+ {0x00,0x3A,0x00},
+ {0x00,0x3B,0x00},
+ {0x00,0x3C,0x00},
+ {0x00,0x3D,0x00},
+ {0x00,0x3F,0x11},
+ {0x00,0x40,0x04},
+ {0x00,0x41,0x0E},
+ {0x00,0x42,0x00},
+ {0x00,0x43,0x00},
+ {0x00,0x44,0x00},
+ {0x00,0x45,0x0C},
+ {0x00,0x46,0x32},
+ {0x00,0x47,0x00},
+ {0x00,0x48,0x00},
+ {0x00,0x49,0x00},
+ {0x00,0x4A,0x32},
+ {0x00,0x4B,0x00},
+ {0x00,0x4C,0x00},
+ {0x00,0x4D,0x00},
+ {0x00,0x4E,0x05},
+ {0x00,0x4F,0x00},
+ {0x00,0x51,0x03},
+ {0x00,0x52,0x00},
+ {0x00,0x53,0x00},
+ {0x00,0x54,0x00},
+ {0x00,0x55,0x03},
+ {0x00,0x56,0x00},
+ {0x00,0x57,0x00},
+ {0x00,0x58,0x00},
+ {0x00,0x59,0x03},
+ {0x00,0x5A,0x55},
+ {0x00,0x5B,0x55},
+ {0x00,0x5C,0xD0},
+ {0x00,0x5D,0x00},
+ {0x00,0x5E,0x00},
+ {0x00,0x5F,0x00},
+ {0x00,0x60,0x00},
+ {0x00,0x61,0x00},
+ {0x00,0x62,0x00},
+ {0x00,0x63,0x00},
+ {0x00,0x64,0x00},
+ {0x00,0x65,0x00},
+ {0x00,0x66,0x00},
+ {0x00,0x67,0x00},
+ {0x00,0x68,0x00},
+ {0x00,0x69,0x00},
+ {0x00,0x92,0x00},
+ {0x00,0x93,0x00},
+ {0x00,0x95,0x00},
+ {0x00,0x96,0x00},
+ {0x00,0x98,0x00},
+ {0x00,0x9A,0x02},
+ {0x00,0x9B,0x10},
+ {0x00,0x9D,0x00},
+ {0x00,0x9E,0x20},
+ {0x00,0xA0,0x00},
+ {0x00,0xA2,0x02},
+ {0x00,0xA8,0xC9},
+ {0x00,0xA9,0x62},
+ {0x00,0xAA,0x10},
+ {0x00,0xAB,0x00},
+ {0x00,0xAC,0x00},
+ {0x01,0x02,0x01},
+ {0x01,0x08,0x06},
+ {0x01,0x09,0x09},
+ {0x01,0x0A,0x6B},
+ {0x01,0x0B,0x00},
+ {0x01,0x0D,0x01},
+ {0x01,0x0E,0x09},
+ {0x01,0x0F,0x3B},
+ {0x01,0x10,0x00},
+ {0x01,0x12,0x06},
+ {0x01,0x13,0x09},
+ {0x01,0x14,0x6B},
+ {0x01,0x15,0x00},
+ {0x01,0x17,0x01},
+ {0x01,0x18,0x09},
+ {0x01,0x19,0x3B},
+ {0x01,0x1A,0x00},
+ {0x01,0x1C,0x06},
+ {0x01,0x1D,0x09},
+ {0x01,0x1E,0x6B},
+ {0x01,0x1F,0x00},
+ {0x01,0x21,0x01},
+ {0x01,0x22,0x09},
+ {0x01,0x23,0x3B},
+ {0x01,0x24,0x00},
+ {0x01,0x26,0x06},
+ {0x01,0x27,0x09},
+ {0x01,0x28,0x6B},
+ {0x01,0x29,0x00},
+ {0x01,0x2B,0x01},
+ {0x01,0x2C,0x09},
+ {0x01,0x2D,0x3B},
+ {0x01,0x2E,0x00},
+ {0x01,0x30,0x06},
+ {0x01,0x31,0x09},
+ {0x01,0x32,0x6B},
+ {0x01,0x33,0x00},
+ {0x01,0x3A,0x06},
+ {0x01,0x3B,0xCC},
+ {0x01,0x3C,0x00},
+ {0x01,0x3D,0x00},
+ {0x01,0x3F,0x00},
+ {0x01,0x40,0x00},
+ {0x01,0x41,0x40},
+ {0x01,0x42,0xFF},
+ {0x02,0x02,0x00},
+ {0x02,0x03,0x00},
+ {0x02,0x04,0x00},
+ {0x02,0x05,0x00},
+ {0x02,0x06,0x00},
+ {0x02,0x08,0x4F},
+ {0x02,0x09,0x00},
+ {0x02,0x0A,0x00},
+ {0x02,0x0B,0x00},
+ {0x02,0x0C,0x00},
+ {0x02,0x0D,0x00},
+ {0x02,0x0E,0x01},
+ {0x02,0x0F,0x00},
+ {0x02,0x10,0x00},
+ {0x02,0x11,0x00},
+ {0x02,0x12,0x00},
+ {0x02,0x13,0x00},
+ {0x02,0x14,0x00},
+ {0x02,0x15,0x00},
+ {0x02,0x16,0x00},
+ {0x02,0x17,0x00},
+ {0x02,0x18,0x00},
+ {0x02,0x19,0x00},
+ {0x02,0x1A,0x00},
+ {0x02,0x1B,0x00},
+ {0x02,0x1C,0x00},
+ {0x02,0x1D,0x00},
+ {0x02,0x1E,0x00},
+ {0x02,0x1F,0x00},
+ {0x02,0x20,0x00},
+ {0x02,0x21,0x00},
+ {0x02,0x22,0x00},
+ {0x02,0x23,0x00},
+ {0x02,0x24,0x00},
+ {0x02,0x25,0x00},
+ {0x02,0x26,0x00},
+ {0x02,0x27,0x00},
+ {0x02,0x28,0x00},
+ {0x02,0x29,0x00},
+ {0x02,0x2A,0x00},
+ {0x02,0x2B,0x00},
+ {0x02,0x2C,0x00},
+ {0x02,0x2D,0x00},
+ {0x02,0x2E,0x00},
+ {0x02,0x2F,0x00},
+ {0x02,0x31,0x03},
+ {0x02,0x32,0x03},
+ {0x02,0x33,0x03},
+ {0x02,0x34,0x03},
+ {0x02,0x35,0x00},
+ {0x02,0x36,0x00},
+ {0x02,0x37,0x00},
+ {0x02,0x38,0xC0},
+ {0x02,0x39,0xDE},
+ {0x02,0x3A,0x00},
+ {0x02,0x3B,0x00},
+ {0x02,0x3C,0x00},
+ {0x02,0x3D,0x00},
+ {0x02,0x3E,0xC8},
+ {0x02,0x4A,0x00},
+ {0x02,0x4B,0x00},
+ {0x02,0x4C,0x00},
+ {0x02,0x4D,0x00},
+ {0x02,0x4E,0x00},
+ {0x02,0x4F,0x00},
+ {0x02,0x50,0x00},
+ {0x02,0x51,0x00},
+ {0x02,0x52,0x00},
+ {0x02,0x53,0x00},
+ {0x02,0x54,0x00},
+ {0x02,0x55,0x00},
+ {0x02,0x56,0x00},
+ {0x02,0x57,0x00},
+ {0x02,0x58,0x00},
+ {0x02,0x59,0x00},
+ {0x02,0x5A,0x00},
+ {0x02,0x5B,0x00},
+ {0x02,0x5C,0x00},
+ {0x02,0x5D,0x00},
+ {0x02,0x5E,0x00},
+ {0x02,0x5F,0x00},
+ {0x02,0x60,0x00},
+ {0x02,0x61,0x00},
+ {0x02,0x62,0x00},
+ {0x02,0x63,0x00},
+ {0x02,0x64,0x00},
+ {0x02,0x68,0x00},
+ {0x02,0x69,0x00},
+ {0x02,0x6A,0x00},
+ {0x02,0x6B,0x47},
+ {0x02,0x6C,0x50},
+ {0x02,0x6D,0x4F},
+ {0x02,0x6E,0x4E},
+ {0x02,0x6F,0x5F},
+ {0x02,0x70,0x43},
+ {0x02,0x71,0x4C},
+ {0x02,0x72,0x4B},
+ {0x03,0x02,0x00},
+ {0x03,0x03,0x00},
+ {0x03,0x04,0x00},
+ {0x03,0x05,0x00},
+ {0x03,0x06,0x16},
+ {0x03,0x07,0x00},
+ {0x03,0x08,0x00},
+ {0x03,0x09,0x00},
+ {0x03,0x0A,0x00},
+ {0x03,0x0B,0x80},
+ {0x03,0x0D,0x00},
+ {0x03,0x0E,0x00},
+ {0x03,0x0F,0x00},
+ {0x03,0x10,0x00},
+ {0x03,0x11,0x00},
+ {0x03,0x12,0x00},
+ {0x03,0x13,0x00},
+ {0x03,0x14,0x00},
+ {0x03,0x15,0x00},
+ {0x03,0x16,0x00},
+ {0x03,0x18,0x00},
+ {0x03,0x19,0x00},
+ {0x03,0x1A,0x00},
+ {0x03,0x1B,0x00},
+ {0x03,0x1C,0x00},
+ {0x03,0x1D,0x00},
+ {0x03,0x1E,0x00},
+ {0x03,0x1F,0x00},
+ {0x03,0x20,0x00},
+ {0x03,0x21,0x00},
+ {0x03,0x23,0x00},
+ {0x03,0x24,0x00},
+ {0x03,0x25,0x00},
+ {0x03,0x26,0x00},
+ {0x03,0x27,0x00},
+ {0x03,0x28,0x00},
+ {0x03,0x29,0x00},
+ {0x03,0x2A,0x00},
+ {0x03,0x2B,0x00},
+ {0x03,0x2C,0x00},
+ {0x03,0x2E,0x00},
+ {0x03,0x2F,0x00},
+ {0x03,0x30,0x00},
+ {0x03,0x31,0x00},
+ {0x03,0x32,0x00},
+ {0x03,0x33,0x00},
+ {0x03,0x34,0x00},
+ {0x03,0x35,0x00},
+ {0x03,0x36,0x00},
+ {0x03,0x37,0x00},
+ {0x03,0x39,0x1F},
+ {0x03,0x3B,0x00},
+ {0x03,0x3C,0x00},
+ {0x03,0x3D,0x00},
+ {0x03,0x3E,0x00},
+ {0x03,0x3F,0x00},
+ {0x03,0x40,0x00},
+ {0x03,0x41,0x00},
+ {0x03,0x42,0x00},
+ {0x03,0x43,0x00},
+ {0x03,0x44,0x00},
+ {0x03,0x45,0x00},
+ {0x03,0x46,0x00},
+ {0x03,0x47,0x00},
+ {0x03,0x48,0x00},
+ {0x03,0x49,0x00},
+ {0x03,0x4A,0x00},
+ {0x03,0x4B,0x00},
+ {0x03,0x4C,0x00},
+ {0x03,0x4D,0x00},
+ {0x03,0x4E,0x00},
+ {0x03,0x4F,0x00},
+ {0x03,0x50,0x00},
+ {0x03,0x51,0x00},
+ {0x03,0x52,0x00},
+ {0x03,0x53,0x00},
+ {0x03,0x54,0x00},
+ {0x03,0x55,0x00},
+ {0x03,0x56,0x00},
+ {0x03,0x57,0x00},
+ {0x03,0x58,0x00},
+ {0x03,0x59,0x00},
+ {0x03,0x5A,0x00},
+ {0x03,0x5B,0x00},
+ {0x03,0x5C,0x00},
+ {0x03,0x5D,0x00},
+ {0x03,0x5E,0x00},
+ {0x03,0x5F,0x00},
+ {0x03,0x60,0x00},
+ {0x03,0x61,0x00},
+ {0x03,0x62,0x00},
+ {0x04,0x87,0x00},
+ {0x05,0x02,0x01},
+ {0x05,0x08,0x14},
+ {0x05,0x09,0x22},
+ {0x05,0x0A,0x0D},
+ {0x05,0x0B,0x0C},
+ {0x05,0x0C,0x01},
+ {0x05,0x0D,0x3F},
+ {0x05,0x0E,0x15},
+ {0x05,0x0F,0x26},
+ {0x05,0x10,0x0C},
+ {0x05,0x11,0x0B},
+ {0x05,0x12,0x01},
+ {0x05,0x13,0x3F},
+ {0x05,0x15,0x00},
+ {0x05,0x16,0x00},
+ {0x05,0x17,0x00},
+ {0x05,0x18,0xDF},
+ {0x05,0x19,0x38},
+ {0x05,0x1A,0x03},
+ {0x05,0x1B,0x00},
+ {0x05,0x1C,0x00},
+ {0x05,0x1D,0x80},
+ {0x05,0x1E,0x96},
+ {0x05,0x1F,0x98},
+ {0x05,0x21,0x33},
+ {0x05,0x2A,0x01},
+ {0x05,0x2B,0x01},
+ {0x05,0x2C,0x0F},
+ {0x05,0x2D,0x03},
+ {0x05,0x2E,0x19},
+ {0x05,0x2F,0x19},
+ {0x05,0x31,0x00},
+ {0x05,0x32,0x4B},
+ {0x05,0x33,0x03},
+ {0x05,0x34,0x00},
+ {0x05,0x36,0x0C},
+ {0x05,0x37,0x00},
+ {0x05,0x38,0x01},
+ {0x05,0x39,0x00},
+ {0x09,0x0E,0x02},
+ {0x09,0x43,0x01},
+ {0x09,0x49,0x01},
+ {0x09,0x4A,0x01},
+ {0x0A,0x02,0x00},
+ {0x0A,0x03,0x01},
+ {0x0A,0x04,0x01},
+ {0x0A,0x05,0x01},
+ {0x0B,0x44,0x0F},
+ {0x0B,0x46,0x00},
+ {0x0B,0x47,0x00},
+ {0x0B,0x48,0x0E},
+ {0x0B,0x4A,0x1E},
+ {0x05,0x14,0x01},
+ {0x00,0x1C,0x01},
+ {0x0B,0x24,0xDB},
+ {0x0B,0x25,0x02}
+};
+
+static dpll_command epon_dpll_table[] =
+{
+ {0x0B,0x24,0xD8},
+ {0x0B,0x25,0x00},
+ {0x00,0x0B,0x68},
+ {0x00,0x16,0x02},
+ {0x00,0x17,0x1C},
+ {0x00,0x18,0xEE},
+ {0x00,0x19,0xDD},
+ {0x00,0x1A,0xDF},
+ {0x00,0x2B,0x02},
+ {0x00,0x2C,0x01},
+ {0x00,0x2D,0x01},
+ {0x00,0x2E,0x70},
+ {0x00,0x2F,0x00},
+ {0x00,0x30,0x00},
+ {0x00,0x31,0x00},
+ {0x00,0x32,0x00},
+ {0x00,0x33,0x00},
+ {0x00,0x34,0x00},
+ {0x00,0x35,0x00},
+ {0x00,0x36,0x70},
+ {0x00,0x37,0x00},
+ {0x00,0x38,0x00},
+ {0x00,0x39,0x00},
+ {0x00,0x3A,0x00},
+ {0x00,0x3B,0x00},
+ {0x00,0x3C,0x00},
+ {0x00,0x3D,0x00},
+ {0x00,0x3F,0x11},
+ {0x00,0x40,0x04},
+ {0x00,0x41,0x0E},
+ {0x00,0x42,0x00},
+ {0x00,0x43,0x00},
+ {0x00,0x44,0x00},
+ {0x00,0x45,0x0C},
+ {0x00,0x46,0x32},
+ {0x00,0x47,0x00},
+ {0x00,0x48,0x00},
+ {0x00,0x49,0x00},
+ {0x00,0x4A,0x32},
+ {0x00,0x4B,0x00},
+ {0x00,0x4C,0x00},
+ {0x00,0x4D,0x00},
+ {0x00,0x4E,0x05},
+ {0x00,0x4F,0x00},
+ {0x00,0x51,0x03},
+ {0x00,0x52,0x00},
+ {0x00,0x53,0x00},
+ {0x00,0x54,0x00},
+ {0x00,0x55,0x03},
+ {0x00,0x56,0x00},
+ {0x00,0x57,0x00},
+ {0x00,0x58,0x00},
+ {0x00,0x59,0x03},
+ {0x00,0x5A,0x55},
+ {0x00,0x5B,0x55},
+ {0x00,0x5C,0xD0},
+ {0x00,0x5D,0x00},
+ {0x00,0x5E,0x00},
+ {0x00,0x5F,0x00},
+ {0x00,0x60,0x00},
+ {0x00,0x61,0x00},
+ {0x00,0x62,0x00},
+ {0x00,0x63,0x00},
+ {0x00,0x64,0x00},
+ {0x00,0x65,0x00},
+ {0x00,0x66,0x00},
+ {0x00,0x67,0x00},
+ {0x00,0x68,0x00},
+ {0x00,0x69,0x00},
+ {0x00,0x92,0x00},
+ {0x00,0x93,0x00},
+ {0x00,0x95,0x00},
+ {0x00,0x96,0x00},
+ {0x00,0x98,0x00},
+ {0x00,0x9A,0x02},
+ {0x00,0x9B,0x10},
+ {0x00,0x9D,0x00},
+ {0x00,0x9E,0x20},
+ {0x00,0xA0,0x00},
+ {0x00,0xA2,0x02},
+ {0x00,0xA8,0x1E},
+ {0x00,0xA9,0x94},
+ {0x00,0xAA,0x10},
+ {0x00,0xAB,0x00},
+ {0x00,0xAC,0x00},
+ {0x01,0x02,0x01},
+ {0x01,0x08,0x06},
+ {0x01,0x09,0x09},
+ {0x01,0x0A,0x6B},
+ {0x01,0x0B,0x00},
+ {0x01,0x0D,0x01},
+ {0x01,0x0E,0x09},
+ {0x01,0x0F,0x3B},
+ {0x01,0x10,0x00},
+ {0x01,0x12,0x06},
+ {0x01,0x13,0x09},
+ {0x01,0x14,0x6B},
+ {0x01,0x15,0x00},
+ {0x01,0x17,0x01},
+ {0x01,0x18,0x09},
+ {0x01,0x19,0x3B},
+ {0x01,0x1A,0x00},
+ {0x01,0x1C,0x06},
+ {0x01,0x1D,0x09},
+ {0x01,0x1E,0x6B},
+ {0x01,0x1F,0x00},
+ {0x01,0x21,0x01},
+ {0x01,0x22,0x09},
+ {0x01,0x23,0x3B},
+ {0x01,0x24,0x00},
+ {0x01,0x26,0x06},
+ {0x01,0x27,0x09},
+ {0x01,0x28,0x6B},
+ {0x01,0x29,0x00},
+ {0x01,0x2B,0x01},
+ {0x01,0x2C,0x09},
+ {0x01,0x2D,0x3B},
+ {0x01,0x2E,0x00},
+ {0x01,0x30,0x06},
+ {0x01,0x31,0x09},
+ {0x01,0x32,0x6B},
+ {0x01,0x33,0x00},
+ {0x01,0x3A,0x06},
+ {0x01,0x3B,0xCC},
+ {0x01,0x3C,0x00},
+ {0x01,0x3D,0x00},
+ {0x01,0x3F,0x00},
+ {0x01,0x40,0x00},
+ {0x01,0x41,0x40},
+ {0x01,0x42,0xFF},
+ {0x02,0x02,0x00},
+ {0x02,0x03,0x00},
+ {0x02,0x04,0x00},
+ {0x02,0x05,0x00},
+ {0x02,0x06,0x00},
+ {0x02,0x08,0x4F},
+ {0x02,0x09,0x00},
+ {0x02,0x0A,0x00},
+ {0x02,0x0B,0x00},
+ {0x02,0x0C,0x00},
+ {0x02,0x0D,0x00},
+ {0x02,0x0E,0x01},
+ {0x02,0x0F,0x00},
+ {0x02,0x10,0x00},
+ {0x02,0x11,0x00},
+ {0x02,0x12,0x00},
+ {0x02,0x13,0x00},
+ {0x02,0x14,0x00},
+ {0x02,0x15,0x00},
+ {0x02,0x16,0x00},
+ {0x02,0x17,0x00},
+ {0x02,0x18,0x00},
+ {0x02,0x19,0x00},
+ {0x02,0x1A,0x00},
+ {0x02,0x1B,0x00},
+ {0x02,0x1C,0x00},
+ {0x02,0x1D,0x00},
+ {0x02,0x1E,0x00},
+ {0x02,0x1F,0x00},
+ {0x02,0x20,0x00},
+ {0x02,0x21,0x00},
+ {0x02,0x22,0x00},
+ {0x02,0x23,0x00},
+ {0x02,0x24,0x00},
+ {0x02,0x25,0x00},
+ {0x02,0x26,0x00},
+ {0x02,0x27,0x00},
+ {0x02,0x28,0x00},
+ {0x02,0x29,0x00},
+ {0x02,0x2A,0x00},
+ {0x02,0x2B,0x00},
+ {0x02,0x2C,0x00},
+ {0x02,0x2D,0x00},
+ {0x02,0x2E,0x00},
+ {0x02,0x2F,0x00},
+ {0x02,0x31,0x03},
+ {0x02,0x32,0x03},
+ {0x02,0x33,0x03},
+ {0x02,0x34,0x03},
+ {0x02,0x35,0x00},
+ {0x02,0x36,0x00},
+ {0x02,0x37,0x00},
+ {0x02,0x38,0xD8},
+ {0x02,0x39,0xD6},
+ {0x02,0x3A,0x00},
+ {0x02,0x3B,0x00},
+ {0x02,0x3C,0x00},
+ {0x02,0x3D,0x00},
+ {0x02,0x3E,0xC0},
+ {0x02,0x4A,0x00},
+ {0x02,0x4B,0x00},
+ {0x02,0x4C,0x00},
+ {0x02,0x4D,0x00},
+ {0x02,0x4E,0x00},
+ {0x02,0x4F,0x00},
+ {0x02,0x50,0x00},
+ {0x02,0x51,0x00},
+ {0x02,0x52,0x00},
+ {0x02,0x53,0x00},
+ {0x02,0x54,0x00},
+ {0x02,0x55,0x00},
+ {0x02,0x56,0x00},
+ {0x02,0x57,0x00},
+ {0x02,0x58,0x00},
+ {0x02,0x59,0x00},
+ {0x02,0x5A,0x00},
+ {0x02,0x5B,0x00},
+ {0x02,0x5C,0x00},
+ {0x02,0x5D,0x00},
+ {0x02,0x5E,0x00},
+ {0x02,0x5F,0x00},
+ {0x02,0x60,0x00},
+ {0x02,0x61,0x00},
+ {0x02,0x62,0x00},
+ {0x02,0x63,0x00},
+ {0x02,0x64,0x00},
+ {0x02,0x68,0x00},
+ {0x02,0x69,0x00},
+ {0x02,0x6A,0x00},
+ {0x02,0x6B,0x45},
+ {0x02,0x6C,0x50},
+ {0x02,0x6D,0x4F},
+ {0x02,0x6E,0x4E},
+ {0x02,0x6F,0x5F},
+ {0x02,0x70,0x43},
+ {0x02,0x71,0x4C},
+ {0x02,0x72,0x4B},
+ {0x03,0x02,0x00},
+ {0x03,0x03,0x00},
+ {0x03,0x04,0x00},
+ {0x03,0x05,0x00},
+ {0x03,0x06,0x16},
+ {0x03,0x07,0x00},
+ {0x03,0x08,0x00},
+ {0x03,0x09,0x00},
+ {0x03,0x0A,0x00},
+ {0x03,0x0B,0x80},
+ {0x03,0x0D,0x00},
+ {0x03,0x0E,0x00},
+ {0x03,0x0F,0x00},
+ {0x03,0x10,0x00},
+ {0x03,0x11,0x00},
+ {0x03,0x12,0x00},
+ {0x03,0x13,0x00},
+ {0x03,0x14,0x00},
+ {0x03,0x15,0x00},
+ {0x03,0x16,0x00},
+ {0x03,0x18,0x00},
+ {0x03,0x19,0x00},
+ {0x03,0x1A,0x00},
+ {0x03,0x1B,0x00},
+ {0x03,0x1C,0x00},
+ {0x03,0x1D,0x00},
+ {0x03,0x1E,0x00},
+ {0x03,0x1F,0x00},
+ {0x03,0x20,0x00},
+ {0x03,0x21,0x00},
+ {0x03,0x23,0x00},
+ {0x03,0x24,0x00},
+ {0x03,0x25,0x00},
+ {0x03,0x26,0x00},
+ {0x03,0x27,0x00},
+ {0x03,0x28,0x00},
+ {0x03,0x29,0x00},
+ {0x03,0x2A,0x00},
+ {0x03,0x2B,0x00},
+ {0x03,0x2C,0x00},
+ {0x03,0x2E,0x00},
+ {0x03,0x2F,0x00},
+ {0x03,0x30,0x00},
+ {0x03,0x31,0x00},
+ {0x03,0x32,0x00},
+ {0x03,0x33,0x00},
+ {0x03,0x34,0x00},
+ {0x03,0x35,0x00},
+ {0x03,0x36,0x00},
+ {0x03,0x37,0x00},
+ {0x03,0x39,0x1F},
+ {0x03,0x3B,0x00},
+ {0x03,0x3C,0x00},
+ {0x03,0x3D,0x00},
+ {0x03,0x3E,0x00},
+ {0x03,0x3F,0x00},
+ {0x03,0x40,0x00},
+ {0x03,0x41,0x00},
+ {0x03,0x42,0x00},
+ {0x03,0x43,0x00},
+ {0x03,0x44,0x00},
+ {0x03,0x45,0x00},
+ {0x03,0x46,0x00},
+ {0x03,0x47,0x00},
+ {0x03,0x48,0x00},
+ {0x03,0x49,0x00},
+ {0x03,0x4A,0x00},
+ {0x03,0x4B,0x00},
+ {0x03,0x4C,0x00},
+ {0x03,0x4D,0x00},
+ {0x03,0x4E,0x00},
+ {0x03,0x4F,0x00},
+ {0x03,0x50,0x00},
+ {0x03,0x51,0x00},
+ {0x03,0x52,0x00},
+ {0x03,0x53,0x00},
+ {0x03,0x54,0x00},
+ {0x03,0x55,0x00},
+ {0x03,0x56,0x00},
+ {0x03,0x57,0x00},
+ {0x03,0x58,0x00},
+ {0x03,0x59,0x00},
+ {0x03,0x5A,0x00},
+ {0x03,0x5B,0x00},
+ {0x03,0x5C,0x00},
+ {0x03,0x5D,0x00},
+ {0x03,0x5E,0x00},
+ {0x03,0x5F,0x00},
+ {0x03,0x60,0x00},
+ {0x03,0x61,0x00},
+ {0x03,0x62,0x00},
+ {0x04,0x87,0x00},
+ {0x05,0x02,0x01},
+ {0x05,0x08,0x14},
+ {0x05,0x09,0x22},
+ {0x05,0x0A,0x0D},
+ {0x05,0x0B,0x0C},
+ {0x05,0x0C,0x01},
+ {0x05,0x0D,0x3F},
+ {0x05,0x0E,0x15},
+ {0x05,0x0F,0x26},
+ {0x05,0x10,0x0C},
+ {0x05,0x11,0x0B},
+ {0x05,0x12,0x01},
+ {0x05,0x13,0x3F},
+ {0x05,0x15,0x00},
+ {0x05,0x16,0x00},
+ {0x05,0x17,0x00},
+ {0x05,0x18,0x00},
+ {0x05,0x19,0x65},
+ {0x05,0x1A,0x03},
+ {0x05,0x1B,0x00},
+ {0x05,0x1C,0x00},
+ {0x05,0x1D,0x00},
+ {0x05,0x1E,0x00},
+ {0x05,0x1F,0xA0},
+ {0x05,0x21,0x33},
+ {0x05,0x2A,0x01},
+ {0x05,0x2B,0x01},
+ {0x05,0x2C,0x0F},
+ {0x05,0x2D,0x03},
+ {0x05,0x2E,0x19},
+ {0x05,0x2F,0x19},
+ {0x05,0x31,0x00},
+ {0x05,0x32,0x4B},
+ {0x05,0x33,0x03},
+ {0x05,0x34,0x00},
+ {0x05,0x36,0x0C},
+ {0x05,0x37,0x00},
+ {0x05,0x38,0x01},
+ {0x05,0x39,0x00},
+ {0x09,0x0E,0x02},
+ {0x09,0x43,0x01},
+ {0x09,0x49,0x01},
+ {0x09,0x4A,0x01},
+ {0x0A,0x02,0x00},
+ {0x0A,0x03,0x01},
+ {0x0A,0x04,0x01},
+ {0x0A,0x05,0x01},
+ {0x0B,0x44,0x0F},
+ {0x0B,0x46,0x00},
+ {0x0B,0x47,0x00},
+ {0x0B,0x48,0x0E},
+ {0x0B,0x4A,0x1E},
+ {0x05,0x14,0x01},
+ {0x00,0x1C,0x01},
+ {0x0B,0x24,0xDB},
+ {0x0B,0x25,0x02}
+};
+
+static dpll_command gpon_synce_dpll_table[] =
+{
+ {0x0B,0x24,0xD8},
+ {0x0B,0x25,0x00},
+ {0x00,0x0B,0x68},
+ {0x00,0x16,0x02},
+ {0x00,0x17,0x1C},
+ {0x00,0x18,0xCC},
+ {0x00,0x19,0xDD},
+ {0x00,0x1A,0xDF},
+ {0x00,0x2B,0x02},
+ {0x00,0x2C,0x03},
+ {0x00,0x2D,0x05},
+ {0x00,0x2E,0x6E},
+ {0x00,0x2F,0x00},
+ {0x00,0x30,0x37},
+ {0x00,0x31,0x00},
+ {0x00,0x32,0x00},
+ {0x00,0x33,0x00},
+ {0x00,0x34,0x00},
+ {0x00,0x35,0x00},
+ {0x00,0x36,0x6E},
+ {0x00,0x37,0x00},
+ {0x00,0x38,0x37},
+ {0x00,0x39,0x00},
+ {0x00,0x3A,0x00},
+ {0x00,0x3B,0x00},
+ {0x00,0x3C,0x00},
+ {0x00,0x3D,0x00},
+ {0x00,0x3F,0x33},
+ {0x00,0x40,0x04},
+ {0x00,0x41,0x0E},
+ {0x00,0x42,0x0A},
+ {0x00,0x43,0x00},
+ {0x00,0x44,0x00},
+ {0x00,0x45,0x0C},
+ {0x00,0x46,0x32},
+ {0x00,0x47,0x32},
+ {0x00,0x48,0x00},
+ {0x00,0x49,0x00},
+ {0x00,0x4A,0x32},
+ {0x00,0x4B,0x32},
+ {0x00,0x4C,0x00},
+ {0x00,0x4D,0x00},
+ {0x00,0x4E,0x55},
+ {0x00,0x4F,0x00},
+ {0x00,0x51,0x03},
+ {0x00,0x52,0x03},
+ {0x00,0x53,0x00},
+ {0x00,0x54,0x00},
+ {0x00,0x55,0x03},
+ {0x00,0x56,0x03},
+ {0x00,0x57,0x00},
+ {0x00,0x58,0x00},
+ {0x00,0x59,0x0F},
+ {0x00,0x5A,0x55},
+ {0x00,0x5B,0x55},
+ {0x00,0x5C,0xD0},
+ {0x00,0x5D,0x00},
+ {0x00,0x5E,0x55},
+ {0x00,0x5F,0x55},
+ {0x00,0x60,0xD5},
+ {0x00,0x61,0x00},
+ {0x00,0x62,0x00},
+ {0x00,0x63,0x00},
+ {0x00,0x64,0x00},
+ {0x00,0x65,0x00},
+ {0x00,0x66,0x00},
+ {0x00,0x67,0x00},
+ {0x00,0x68,0x00},
+ {0x00,0x69,0x00},
+ {0x00,0x92,0x00},
+ {0x00,0x93,0x00},
+ {0x00,0x95,0x00},
+ {0x00,0x96,0x00},
+ {0x00,0x98,0x00},
+ {0x00,0x9A,0x02},
+ {0x00,0x9B,0x00},
+ {0x00,0x9D,0x00},
+ {0x00,0x9E,0x60},
+ {0x00,0xA0,0x40},
+ {0x00,0xA2,0x02},
+ {0x00,0xA8,0xB7},
+ {0x00,0xA9,0x28},
+ {0x00,0xAA,0x10},
+ {0x00,0xAB,0x00},
+ {0x00,0xAC,0x00},
+ {0x01,0x02,0x01},
+ {0x01,0x08,0x06},
+ {0x01,0x09,0x09},
+ {0x01,0x0A,0x6B},
+ {0x01,0x0B,0x00},
+ {0x01,0x0D,0x01},
+ {0x01,0x0E,0x09},
+ {0x01,0x0F,0x3B},
+ {0x01,0x10,0x00},
+ {0x01,0x12,0x06},
+ {0x01,0x13,0x09},
+ {0x01,0x14,0x6B},
+ {0x01,0x15,0x00},
+ {0x01,0x17,0x01},
+ {0x01,0x18,0x09},
+ {0x01,0x19,0x3B},
+ {0x01,0x1A,0x00},
+ {0x01,0x1C,0x06},
+ {0x01,0x1D,0x09},
+ {0x01,0x1E,0x6B},
+ {0x01,0x1F,0x00},
+ {0x01,0x21,0x01},
+ {0x01,0x22,0x09},
+ {0x01,0x23,0x3B},
+ {0x01,0x24,0x00},
+ {0x01,0x26,0x06},
+ {0x01,0x27,0x09},
+ {0x01,0x28,0x6B},
+ {0x01,0x29,0x00},
+ {0x01,0x2B,0x01},
+ {0x01,0x2C,0x09},
+ {0x01,0x2D,0x3B},
+ {0x01,0x2E,0x00},
+ {0x01,0x30,0x06},
+ {0x01,0x31,0x09},
+ {0x01,0x32,0x6B},
+ {0x01,0x33,0x00},
+ {0x01,0x3A,0x06},
+ {0x01,0x3B,0xCC},
+ {0x01,0x3C,0x00},
+ {0x01,0x3D,0x00},
+ {0x01,0x3F,0x00},
+ {0x01,0x40,0x00},
+ {0x01,0x41,0x40},
+ {0x01,0x42,0xFF},
+ {0x02,0x02,0x00},
+ {0x02,0x03,0x00},
+ {0x02,0x04,0x00},
+ {0x02,0x05,0x00},
+ {0x02,0x06,0x00},
+ {0x02,0x08,0xDB},
+ {0x02,0x09,0x1A},
+ {0x02,0x0A,0x00},
+ {0x02,0x0B,0xC4},
+ {0x02,0x0C,0x09},
+ {0x02,0x0D,0x00},
+ {0x02,0x0E,0x00},
+ {0x02,0x0F,0x00},
+ {0x02,0x10,0x00},
+ {0x02,0x11,0x20},
+ {0x02,0x12,0x37},
+ {0x02,0x13,0x00},
+ {0x02,0x14,0x00},
+ {0x02,0x15,0x14},
+ {0x02,0x16,0x00},
+ {0x02,0x17,0x00},
+ {0x02,0x18,0x00},
+ {0x02,0x19,0x00},
+ {0x02,0x1A,0x00},
+ {0x02,0x1B,0x04},
+ {0x02,0x1C,0x00},
+ {0x02,0x1D,0x00},
+ {0x02,0x1E,0x00},
+ {0x02,0x1F,0x00},
+ {0x02,0x20,0x00},
+ {0x02,0x21,0x00},
+ {0x02,0x22,0x00},
+ {0x02,0x23,0x00},
+ {0x02,0x24,0x00},
+ {0x02,0x25,0x00},
+ {0x02,0x26,0x00},
+ {0x02,0x27,0x00},
+ {0x02,0x28,0x00},
+ {0x02,0x29,0x00},
+ {0x02,0x2A,0x00},
+ {0x02,0x2B,0x00},
+ {0x02,0x2C,0x00},
+ {0x02,0x2D,0x00},
+ {0x02,0x2E,0x00},
+ {0x02,0x2F,0x00},
+ {0x02,0x31,0x11},
+ {0x02,0x32,0x11},
+ {0x02,0x33,0x01},
+ {0x02,0x34,0x01},
+ {0x02,0x35,0x00},
+ {0x02,0x36,0x00},
+ {0x02,0x37,0x00},
+ {0x02,0x38,0xC0},
+ {0x02,0x39,0xDE},
+ {0x02,0x3A,0x00},
+ {0x02,0x3B,0x00},
+ {0x02,0x3C,0x00},
+ {0x02,0x3D,0x00},
+ {0x02,0x3E,0xC8},
+ {0x02,0x4A,0x00},
+ {0x02,0x4B,0x00},
+ {0x02,0x4C,0x00},
+ {0x02,0x4D,0x00},
+ {0x02,0x4E,0x00},
+ {0x02,0x4F,0x00},
+ {0x02,0x50,0x00},
+ {0x02,0x51,0x00},
+ {0x02,0x52,0x00},
+ {0x02,0x53,0x00},
+ {0x02,0x54,0x00},
+ {0x02,0x55,0x00},
+ {0x02,0x56,0x00},
+ {0x02,0x57,0x00},
+ {0x02,0x58,0x00},
+ {0x02,0x59,0x00},
+ {0x02,0x5A,0x00},
+ {0x02,0x5B,0x00},
+ {0x02,0x5C,0x00},
+ {0x02,0x5D,0x00},
+ {0x02,0x5E,0x00},
+ {0x02,0x5F,0x00},
+ {0x02,0x60,0x00},
+ {0x02,0x61,0x00},
+ {0x02,0x62,0x00},
+ {0x02,0x63,0x00},
+ {0x02,0x64,0x00},
+ {0x02,0x68,0x00},
+ {0x02,0x69,0x00},
+ {0x02,0x6A,0x00},
+ {0x02,0x6B,0x47},
+ {0x02,0x6C,0x50},
+ {0x02,0x6D,0x4F},
+ {0x02,0x6E,0x4E},
+ {0x02,0x6F,0x5F},
+ {0x02,0x70,0x43},
+ {0x02,0x71,0x4C},
+ {0x02,0x72,0x4B},
+ {0x03,0x02,0x00},
+ {0x03,0x03,0x00},
+ {0x03,0x04,0x00},
+ {0x03,0x05,0x00},
+ {0x03,0x06,0x16},
+ {0x03,0x07,0x00},
+ {0x03,0x08,0x00},
+ {0x03,0x09,0x00},
+ {0x03,0x0A,0x00},
+ {0x03,0x0B,0x80},
+ {0x03,0x0D,0x00},
+ {0x03,0x0E,0x00},
+ {0x03,0x0F,0x00},
+ {0x03,0x10,0x00},
+ {0x03,0x11,0x00},
+ {0x03,0x12,0x00},
+ {0x03,0x13,0x00},
+ {0x03,0x14,0x00},
+ {0x03,0x15,0x00},
+ {0x03,0x16,0x00},
+ {0x03,0x18,0x00},
+ {0x03,0x19,0x00},
+ {0x03,0x1A,0x00},
+ {0x03,0x1B,0x00},
+ {0x03,0x1C,0x00},
+ {0x03,0x1D,0x00},
+ {0x03,0x1E,0x00},
+ {0x03,0x1F,0x00},
+ {0x03,0x20,0x00},
+ {0x03,0x21,0x00},
+ {0x03,0x23,0x00},
+ {0x03,0x24,0x00},
+ {0x03,0x25,0x00},
+ {0x03,0x26,0x00},
+ {0x03,0x27,0x00},
+ {0x03,0x28,0x00},
+ {0x03,0x29,0x00},
+ {0x03,0x2A,0x00},
+ {0x03,0x2B,0x00},
+ {0x03,0x2C,0x00},
+ {0x03,0x2E,0x00},
+ {0x03,0x2F,0x00},
+ {0x03,0x30,0x00},
+ {0x03,0x31,0x00},
+ {0x03,0x32,0x00},
+ {0x03,0x33,0x00},
+ {0x03,0x34,0x00},
+ {0x03,0x35,0x00},
+ {0x03,0x36,0x00},
+ {0x03,0x37,0x00},
+ {0x03,0x39,0x1F},
+ {0x03,0x3B,0x00},
+ {0x03,0x3C,0x00},
+ {0x03,0x3D,0x00},
+ {0x03,0x3E,0x00},
+ {0x03,0x3F,0x00},
+ {0x03,0x40,0x00},
+ {0x03,0x41,0x00},
+ {0x03,0x42,0x00},
+ {0x03,0x43,0x00},
+ {0x03,0x44,0x00},
+ {0x03,0x45,0x00},
+ {0x03,0x46,0x00},
+ {0x03,0x47,0x00},
+ {0x03,0x48,0x00},
+ {0x03,0x49,0x00},
+ {0x03,0x4A,0x00},
+ {0x03,0x4B,0x00},
+ {0x03,0x4C,0x00},
+ {0x03,0x4D,0x00},
+ {0x03,0x4E,0x00},
+ {0x03,0x4F,0x00},
+ {0x03,0x50,0x00},
+ {0x03,0x51,0x00},
+ {0x03,0x52,0x00},
+ {0x03,0x53,0x00},
+ {0x03,0x54,0x00},
+ {0x03,0x55,0x00},
+ {0x03,0x56,0x00},
+ {0x03,0x57,0x00},
+ {0x03,0x58,0x00},
+ {0x03,0x59,0x00},
+ {0x03,0x5A,0x00},
+ {0x03,0x5B,0x00},
+ {0x03,0x5C,0x00},
+ {0x03,0x5D,0x00},
+ {0x03,0x5E,0x00},
+ {0x03,0x5F,0x00},
+ {0x03,0x60,0x00},
+ {0x03,0x61,0x00},
+ {0x03,0x62,0x00},
+ {0x04,0x87,0x00},
+ {0x05,0x02,0x01},
+ {0x05,0x08,0x14},
+ {0x05,0x09,0x22},
+ {0x05,0x0A,0x0D},
+ {0x05,0x0B,0x0C},
+ {0x05,0x0C,0x01},
+ {0x05,0x0D,0x3F},
+ {0x05,0x0E,0x15},
+ {0x05,0x0F,0x26},
+ {0x05,0x10,0x0C},
+ {0x05,0x11,0x0B},
+ {0x05,0x12,0x01},
+ {0x05,0x13,0x3F},
+ {0x05,0x15,0x00},
+ {0x05,0x16,0xB8},
+ {0x05,0x17,0xC1},
+ {0x05,0x18,0x49},
+ {0x05,0x19,0xAC},
+ {0x05,0x1A,0x02},
+ {0x05,0x1B,0x00},
+ {0x05,0x1C,0x00},
+ {0x05,0x1D,0x00},
+ {0x05,0x1E,0x00},
+ {0x05,0x1F,0x80},
+ {0x05,0x21,0x31},
+ {0x05,0x2A,0x00},
+ {0x05,0x2B,0x01},
+ {0x05,0x2C,0x0F},
+ {0x05,0x2D,0x03},
+ {0x05,0x2E,0x19},
+ {0x05,0x2F,0x19},
+ {0x05,0x31,0x00},
+ {0x05,0x32,0x42},
+ {0x05,0x33,0x03},
+ {0x05,0x34,0x00},
+ {0x05,0x36,0x0C},
+ {0x05,0x37,0x00},
+ {0x05,0x38,0x21},
+ {0x05,0x39,0x00},
+ {0x09,0x0E,0x02},
+ {0x09,0x43,0x01},
+ {0x09,0x49,0x03},
+ {0x09,0x4A,0x03},
+ {0x0A,0x02,0x00},
+ {0x0A,0x03,0x01},
+ {0x0A,0x04,0x01},
+ {0x0A,0x05,0x01},
+ {0x0B,0x44,0x0C},
+ {0x0B,0x46,0x00},
+ {0x0B,0x47,0x00},
+ {0x0B,0x48,0x0C},
+ {0x0B,0x4A,0x1E},
+ {0x05,0x14,0x01},
+ {0x00,0x1C,0x01},
+ {0x0B,0x24,0xDB},
+ {0x0B,0x25,0x02}
+};
+
+#endif
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/fs/i2c_addrs.sh b/bcm68620_release/release/host_customized/board/wrx/fs/i2c_addrs.sh
new file mode 100755
index 0000000..643fd4c
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/fs/i2c_addrs.sh
@@ -0,0 +1,4 @@
+#! /bin/bash
+
+# Body will be inserted here by copy_host_fs target in project's main Makefile
+
diff --git a/bcm68620_release/release/host_customized/board/wrx/fs/svk_init.sh b/bcm68620_release/release/host_customized/board/wrx/fs/svk_init.sh
new file mode 100755
index 0000000..c1eece0
--- /dev/null
+++ b/bcm68620_release/release/host_customized/board/wrx/fs/svk_init.sh
@@ -0,0 +1,156 @@
+#! /bin/bash
+cd /opt/bcm68620
+
+# These files are mounted using tmpfs, so they will be deleted upon reboot
+LOCK_DIR_INIT=/tmp/bcm68620_svk_init
+FILE_INIT_DONE="$LOCK_DIR_INIT/done"
+LOCK_DIR_KERNEL_LOG_OWNED=/tmp/bcm68620_kernel_log_owned
+
+USER_APPL_ARGS=""
+KT2_PORT=""
+SWKT2_PORT=""
+KERNEL_LOG="y"
+COOP_DBA="n"
+
+while (($#)); do
+ case "$1" in
+ --kt2)
+ shift
+ KT2_PORT="$1"
+ ;;
+ --swkt2)
+ shift
+ SWKT2_PORT="$1"
+ ;;
+ --proxy) # for backward compatibility (could just use '-proxy')
+ shift
+ USER_APPL_ARGS="$USER_APPL_ARGS -proxy $1"
+ ;;
+ -nl)
+ KERNEL_LOG="n"
+ USER_APPL_ARGS="$USER_APPL_ARGS $1"
+ ;;
+ -coop_dba)
+ COOP_DBA="y"
+ ;;
+ *)
+ USER_APPL_ARGS="$USER_APPL_ARGS $1"
+ ;;
+ esac
+ shift
+done
+
+# Check if the initialization steps (installing kernel modules, etc) have already been done.
+# If not, start the initialization process.
+if mkdir "$LOCK_DIR_INIT" 2>/dev/null; then
+ trap "rmdir \"$LOCK_DIR_INIT\"" EXIT
+ echo "Initializing BCM68620 SVK..."
+
+ insmod ll_pcie.ko
+ sleep 1
+
+ insmod os_linux.ko
+ sleep 1
+
+ source ./i2c_addrs.sh
+ insmod i2c_devs.ko
+ sleep 1
+
+ function probe_dev
+ {
+ 2>/dev/null echo maple_i2c 0x$1 > /sys/bus/i2c/devices/i2c-0/new_device
+ }
+
+ # Suppress error warnings in case device cannot be probed because it is inexistent.
+ dmesg -n 1
+ probe_dev $I2C_SW0_I2C_ADDR
+ probe_dev $I2C_SW1_I2C_ADDR
+ probe_dev $I2C_SW2_I2C_ADDR
+ probe_dev $I2C_SW3_I2C_ADDR
+ probe_dev $I2C_SW4_I2C_ADDR
+ probe_dev $SFP_I2C_ADDR1
+ probe_dev $SFP_I2C_ADDR2
+ probe_dev $FPGA_I2C_ADDR
+ probe_dev $PON_DPLL_I2C_ADDR
+ probe_dev $PM_DPLL_I2C_ADDR
+ probe_dev $CXP_T_I2C_ADDR
+ probe_dev $CXP_R_I2C_ADDR
+ probe_dev $PCIE_SW_I2C_ADDR
+ dmesg -n 8
+
+ rm -f /dev/maple_i2c
+ mknod /dev/maple_i2c c `cat /sys/module/i2c_devs/parameters/maple_i2c_chrdev_major` 0
+
+ if [ "$KT2_PORT" != "" ]; then
+ echo k 1 > /proc/maple_i2c/i2c
+ insmod linux-kernel-bde.ko
+ sleep 1
+ cat /proc/linux-kernel-bde
+ sleep 1
+ insmod linux-uk-proxy.ko
+ sleep 1
+ mknod /dev/linux-uk-proxy c 125 0
+ sleep 1
+ insmod linux-bcm-diag-full.ko
+ sleep 1
+ echo "KT2 will wait on port $KT2_PORT"
+ ./bcm.user.proxy -d $KT2_PORT &
+ fi
+
+ if [ "$SWKT2_PORT" != "" ]; then
+ echo "SW KT2 init"
+ insmod linux-kernel-bde.ko
+ sleep 1
+ cat /proc/linux-kernel-bde
+ sleep 1
+ insmod linux-uk-proxy.ko
+ sleep 1
+ mknod /dev/linux-uk-proxy c 125 0
+ sleep 1
+ insmod linux-bcm-diag-full.ko
+ sleep 1
+ echo "KT2 will wait on port $SWKT2_PORT"
+ ./bcm.user.proxy -d $SWKT2_PORT &
+ fi
+
+ insmod bcm_dev_ctrl_linux.ko
+ sleep 1
+
+ if [ "$COOP_DBA" != "n" ]; then
+ insmod coop_dba_linux.ko
+ sleep 1
+ fi
+
+ rm -f /dev/bcm_log
+ mknod /dev/bcm_log c `cat /sys/module/bcm_dev_ctrl_linux/parameters/dev_log_chrdev_major` 0
+ mknod /dev/maple_dev_ctrl c `cat /sys/module/bcm_dev_ctrl_linux/parameters/maple_dev_ctrl_chrdev_major` 0
+
+ touch "$FILE_INIT_DONE"
+ trap - EXIT
+else
+ if [ -f "$FILE_INIT_DONE" ]; then
+ echo "Skipped BCM68620 SVK initialization since it has already been done"
+ else
+ echo "Waiting for SVK initialization to complete..."
+ while [ ! -f "$FILE_INIT_DONE" ]; do
+ sleep 1
+ done
+ fi
+fi
+
+# Only one application can have the kernel logger enabled at once.
+# If someone else already owns the kernel logger, run without it.
+if [ "$KERNEL_LOG" == "y" ]; then
+ if mkdir "$LOCK_DIR_KERNEL_LOG_OWNED" 2>/dev/null; then
+ trap "rmdir \"$LOCK_DIR_KERNEL_LOG_OWNED\"" EXIT
+ else
+ USER_APPL_ARGS="$USER_APPL_ARGS -nl"
+ echo "Running without kernel logger since someone else owns it"
+ fi
+fi
+
+#echo "In Band: Launching BCM68620 user space device control application "
+#./bcm_dev_ctrl_user > /dev/null 2>&1 &
+
+echo "Launching BCM68620 user application with options \"$USER_APPL_ARGS\""
+./bcm_user_appl $USER_APPL_ARGS