+++ /dev/null
-/*
- * plio.h
- * PLIO defines.
- *
- * Copyright © 2009 Ubicom Inc. <www.ubicom.com>. All Rights Reserved.
- *
- * This file is part of the Ubicom32 Linux Kernel Port.
- *
- * The Ubicom32 Linux Kernel Port 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.
- *
- * The Ubicom32 Linux Kernel Port 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 the Ubicom32 Linux Kernel Port. If not,
- * see <http://www.gnu.org/licenses/>.
- * This file contains confidential information of Ubicom, Inc. and your use of
- * this file is subject to the Ubicom Software License Agreement distributed with
- * this file. If you are uncertain whether you are an authorized user or to report
- * any unauthorized use, please contact Ubicom, Inc. at +1-408-789-2200.
- * Unauthorized reproduction or distribution of this file is subject to civil and
- * criminal penalties.
- */
-
-#ifndef __PLIO__H__
-#define __PLIO__H__
-
-#include <asm/ip5000.h>
-#include <asm/thread.h>
-
-#define PLIO_PORT RD
-#define PLIO_EXT_PORT RI
-
-#define TRANSMIT_FIFO_WATERMARK 8
-
-/*
- * PLIO non-blocking register definitions
- */
-#define PLIO_FN 2
-
-typedef struct {
- unsigned : 10;
- unsigned rxfifo_thread_enable: 1; /* allowed rxfifo thread enable */
- unsigned : 1;
- unsigned rxfifo_thread: 4; /* allowed rxfifo thread access */
- unsigned : 4;
- unsigned br_thread: 4; /* allowed blocking region thread access */
- unsigned fn_reset: 4; /* function reset bit vector */
- unsigned rxfifo_sel: 1; /* select between RXFIFO 0 and 1 */
- unsigned fn_sel: 3; /* select port function */
-} plio_io_function_t;
-
-typedef struct {
- unsigned : 24;
- unsigned pin:8;
-} plio_gpio_t;
-
-typedef struct {
- unsigned : 16;
- unsigned txfifo_uf: 1; /* TXFIFO underflow */
- unsigned txfifo_wm: 1; /* TXFIFO watermark */
- unsigned rxfifo_of: 1; /* RXFIFO overflow */
- unsigned rxfifo_wm: 1; /* RXFIFO watermark */
- unsigned : 5;
- unsigned lreg_int_addr_rd: 1; /* read from specified LREG address */
- unsigned lreg_int_addr_wr: 1; /* write to specified LREG address */
- unsigned extctl_int: 4; /* synchronized external interrupts */
- unsigned pfsm_int: 1; /* state machine */
-} plio_intstat_t;
-
-typedef struct {
- unsigned txfifo_reset: 1; /* TXFIFO reset for int_set only */
- unsigned rxfifo_reset: 1; /* RXFIFO reset for int_set only */
- unsigned : 11;
- unsigned idif_txfifo_flush: 1; /* flush TXFIFO and idif_txfifo */
- unsigned idif_rxfifo_flush: 1; /* flush RXFIFO and idif_rxfifo */
- unsigned pfsm_start: 1; /* input to fsm */
- unsigned txfifo_uf: 1; /* TXFIFO underflow */
- unsigned txfifo_wm: 1; /* TXFIFO watermark */
- unsigned rxfifo_of: 1; /* RXFIFO overflow */
- unsigned rxfifo_wm: 1; /* RXFIFO watermark */
- unsigned : 5;
- unsigned lreg_int_addr_rd: 1; /* read from specified LREG address */
- unsigned lreg_int_addr_wr: 1; /* write to specified LREG address */
- unsigned extctl_int: 4; /* synchronized external interrupts */
- unsigned pfsm_int: 1; /* state machine */
-} plio_intset_t;
-
-typedef enum {
- PLIO_PORT_MODE_D,
- PLIO_PORT_MODE_DE,
- PLIO_PORT_MODE_DI,
- PLIO_PORT_MODE_DEI,
- PLIO_PORT_MODE_DC,
-} plio_port_mode_t;
-
-typedef enum {
- PLIO_CLK_CORE, /* CORE CLK */
- PLIO_CLK_IO, /* IO CLK */
- PLIO_CLK_EXT, /* EXT CLK */
-} plio_clk_src_t;
-typedef struct {
- unsigned : 4;
- unsigned edif_iaena_sel: 1; /* Input Address Enable Select */
- unsigned edif_iaclk_sel: 1; /* Input Address Clock Select */
- unsigned edif_iald_inv: 1; /* Input Address Strobe Invert */
- unsigned edif_idclk_sel: 1; /* Input Data Clock Select */
- unsigned edif_idld_inv: 1; /* Input Data Strobe Invert */
- unsigned edif_ds: 3; /* specify IDR and ODR data shift */
- unsigned edif_cmp_mode: 1; /* configure IDR comparator output */
- unsigned edif_idena_sel: 1; /* Input Data Enable Select */
- unsigned ecif_extclk_ena: 1; /* plio_extctl output select */
- unsigned idif_tx_fifo_cmd_sel: 1; /* select pfsm_cmd data word position */
- unsigned ptif_porti_cfg: 2; /* select port I pin configuration */
- unsigned ptif_portd_cfg: 3; /* select port D pin configuration */
- plio_port_mode_t ptif_port_mode: 3; /* select other plio ports */
- unsigned icif_clk_plio_ext_inv: 1; /* invert external plio clock when set */
- unsigned icif_rst_plio: 1; /* reset plio function and io fifos */
- plio_clk_src_t icif_clk_src_sel: 2; /* select plio clock source */
- unsigned pfsm_prog: 1; /* enable pfsm programming */
- unsigned pfsm_cmd: 3; /* software input to pfsm */
-} plio_fctl0_t;
-
-typedef struct {
- unsigned : 2;
- unsigned idif_byteswap_tx: 3; /* swap TXFIFO byte order */
- unsigned idif_byteswap_rx: 3; /* swap RXFIFO byte order */
- unsigned : 1;
- unsigned lreg_ena: 1; /* enable local register map */
- unsigned lreg_addr_fifo_cmp_ena: 1; /* enable a specific LREG address from/to TX/RX fifos */
- unsigned lreg_addr_fifo_cmp: 5; /* LREG address routed from/to TX/RX fifos */
- unsigned : 1;
- unsigned dcod_iald_idld_sel: 2; /* select address/data strobes */
- unsigned dcod_rw_src_sel: 1; /* select LREG strobe source */
- unsigned dcod_rd_sel: 5; /* select read strobe source */
- unsigned dcod_wr_sel: 5; /* select write strobe source */
- unsigned dcod_rd_lvl: 1; /* select active level of read strobe */
- unsigned dcod_wr_lvl: 1; /* select active level of read strobe */
-} plio_fctl1_t;
-
-typedef struct {
- unsigned icif_eclk_div: 16; /* external plio clock divider */
- unsigned icif_iclk_div: 16; /* internal plio clock divider */
-} plio_fctl2_t;
-
-typedef struct {
- unsigned : 27;
- unsigned pfsm_state: 5; /* current pfsm state */
-} plio_stat_0_t;
-
-typedef struct {
- unsigned : 3;
- unsigned lreg_r_int_addr: 5;
- unsigned : 11;
- unsigned lreg_w_int_addr: 5;
- unsigned lreg_w_int_data: 8;
-} plio_stat_1_t;
-
-typedef struct {
- unsigned : 32;
-} plio_stat_2_t;
-
-typedef struct {
- unsigned tx: 16;
- unsigned rx: 16;
-} plio_io_fifo_wm_t, plio_io_fifo_lvl_t;
-
-
-/* plio blocking region register definitions
- */
-typedef struct {
- unsigned ns1: 5;
- unsigned ic1: 7;
- unsigned ec1: 4;
- unsigned ns0: 5;
- unsigned ic0: 7;
- unsigned ec0: 4;
-} plio_sram_t;
-
-typedef struct {
- unsigned : 2;
- unsigned s9: 3;
- unsigned s8: 3;
- unsigned s7: 3;
- unsigned s6: 3;
- unsigned s5: 3;
- unsigned s4: 3;
- unsigned s3: 3;
- unsigned s2: 3;
- unsigned s1: 3;
- unsigned s0: 3;
-} plio_grpsel_t;
-
-typedef struct {
- unsigned s7: 4;
- unsigned s6: 4;
- unsigned s5: 4;
- unsigned s4: 4;
- unsigned s3: 4;
- unsigned s2: 4;
- unsigned s1: 4;
- unsigned s0: 4;
-} plio_cs_lut_t;
-
-typedef struct {
- unsigned lut3: 8;
- unsigned lut2: 8;
- unsigned lut1: 8;
- unsigned lut0: 8;
-} plio_extctl_t;
-
-typedef struct {
- plio_grpsel_t grpsel[4];
- u16_t cv[16];
- plio_cs_lut_t cs_lut[4];
- plio_extctl_t extctl_o_lut[8];
-} plio_pfsm_t;
-
-typedef struct {
- u32_t odr_oe_sel;
- u32_t odr_oe;
- u32_t cmp;
- u32_t ncmp;
- u32_t cmp_mask;
-} plio_edif_t;
-
-typedef enum {
- PLIO_ECIF_CLK_OUT = 9,
- PLIO_ECIF_IALD = 9,
- PLIO_ECIF_CLK_IN = 8,
- PLIO_ECIF_IDLD = 8,
- PLIO_ECIF_INT = 2,
-} plio_ecif_output_t;
-
-typedef struct {
- u32_t bypass_sync;
- u32_t ift;
- u32_t output_type;
- u32_t output_ena;
- u32_t output_lvl;
-} plio_ecif_t;
-
-typedef struct {
- u32_t idr_addr_pos_mask;
- u32_t reserved;
- u32_t lreg_bar;
-} plio_dcod_t;
-
-typedef struct {
- u32_t addr_rd_ena;
- u32_t addr_wr_ena;
- u32_t addr_rd_int_ena;
- u32_t addr_wr_int_ena;
-} plio_lcfg_t;
-
-
-/*
- * PLIO configuration
- */
-typedef struct {
- plio_fctl0_t fctl0;
- plio_fctl1_t fctl1;
- plio_fctl2_t fctl2;
-} plio_fctl_t;
-
-typedef struct {
- plio_pfsm_t pfsm;
- plio_edif_t edif;
- plio_ecif_t ecif;
- plio_dcod_t dcod;
- plio_lcfg_t lcfg;
-} plio_config_t;
-
-typedef struct {
- plio_io_function_t function;
- plio_gpio_t gpio_ctl;
- plio_gpio_t gpio_out;
- plio_gpio_t gpio_in;
- plio_intstat_t intstat;
- plio_intstat_t intmask;
- plio_intset_t intset;
- plio_intstat_t intclr;
- unsigned tx_lo;
- unsigned tx_hi;
- unsigned rx_lo;
- unsigned rx_hi;
- plio_fctl0_t fctl0;
- plio_fctl1_t fctl1;
- plio_fctl2_t fctl2;
- plio_stat_0_t stat0;
- plio_stat_1_t stat1;
- plio_stat_2_t stat2;
- plio_io_fifo_wm_t fifo_wm;
- plio_io_fifo_lvl_t fifo_lvl;
-} plio_nbr_t;
-
-typedef struct {
- u32_t pfsm_sram[256];
- plio_config_t config;
-} plio_br_t;
-
-#define PLIO_NBR ((plio_nbr_t *)(PLIO_PORT))
-#define PLIO_BR ((plio_br_t *)((PLIO_PORT + IO_PORT_BR_OFFSET)))
-#define PEXT_NBR ((plio_nbr_t *)(PLIO_EXT_PORT))
-
-extern void plio_init(const plio_fctl_t *plio_fctl, const plio_config_t *plio_config, const plio_sram_t plio_sram_cfg[], int sram_cfg_size);
-
-#endif // __PLIO__H__