drivers/net/dsa/ocelot/seville_vsc9953.c

Source file repositories/reference/linux-study-clean/drivers/net/dsa/ocelot/seville_vsc9953.c

File Facts

System
Linux kernel
Corpus path
drivers/net/dsa/ocelot/seville_vsc9953.c
Extension
.c
Size
34589 bytes
Lines
1028
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/* Distributed Switch Architecture VSC9953 driver
 * Copyright (C) 2020, Maxim Kochetkov <fido_max@inbox.ru>
 */
#include <linux/platform_device.h>
#include <linux/types.h>
#include <soc/mscc/ocelot_vcap.h>
#include <soc/mscc/ocelot_sys.h>
#include <soc/mscc/ocelot.h>
#include <linux/mdio/mdio-mscc-miim.h>
#include <linux/mod_devicetable.h>
#include <linux/of_mdio.h>
#include <linux/pcs-lynx.h>
#include <linux/dsa/ocelot.h>
#include <linux/iopoll.h>
#include "felix.h"

#define VSC9953_NUM_PORTS			10

#define VSC9953_VCAP_POLICER_BASE		11
#define VSC9953_VCAP_POLICER_MAX		31
#define VSC9953_VCAP_POLICER_BASE2		120
#define VSC9953_VCAP_POLICER_MAX2		161

#define VSC9953_PORT_MODE_SERDES		(OCELOT_PORT_MODE_1000BASEX | \
						 OCELOT_PORT_MODE_SGMII | \
						 OCELOT_PORT_MODE_QSGMII)

static const u32 vsc9953_port_modes[VSC9953_NUM_PORTS] = {
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	VSC9953_PORT_MODE_SERDES,
	OCELOT_PORT_MODE_INTERNAL,
	OCELOT_PORT_MODE_INTERNAL,
};

static const u32 vsc9953_ana_regmap[] = {
	REG(ANA_ADVLEARN,			0x00b500),
	REG(ANA_VLANMASK,			0x00b504),
	REG_RESERVED(ANA_PORT_B_DOMAIN),
	REG(ANA_ANAGEFIL,			0x00b50c),
	REG(ANA_ANEVENTS,			0x00b510),
	REG(ANA_STORMLIMIT_BURST,		0x00b514),
	REG(ANA_STORMLIMIT_CFG,			0x00b518),
	REG(ANA_ISOLATED_PORTS,			0x00b528),
	REG(ANA_COMMUNITY_PORTS,		0x00b52c),
	REG(ANA_AUTOAGE,			0x00b530),
	REG(ANA_MACTOPTIONS,			0x00b534),
	REG(ANA_LEARNDISC,			0x00b538),
	REG(ANA_AGENCTRL,			0x00b53c),
	REG(ANA_MIRRORPORTS,			0x00b540),
	REG(ANA_EMIRRORPORTS,			0x00b544),
	REG(ANA_FLOODING,			0x00b548),
	REG(ANA_FLOODING_IPMC,			0x00b54c),
	REG(ANA_SFLOW_CFG,			0x00b550),
	REG(ANA_PORT_MODE,			0x00b57c),
	REG_RESERVED(ANA_CUT_THRU_CFG),
	REG(ANA_PGID_PGID,			0x00b600),
	REG(ANA_TABLES_ANMOVED,			0x00b4ac),
	REG(ANA_TABLES_MACHDATA,		0x00b4b0),
	REG(ANA_TABLES_MACLDATA,		0x00b4b4),
	REG_RESERVED(ANA_TABLES_STREAMDATA),
	REG(ANA_TABLES_MACACCESS,		0x00b4b8),
	REG(ANA_TABLES_MACTINDX,		0x00b4bc),
	REG(ANA_TABLES_VLANACCESS,		0x00b4c0),
	REG(ANA_TABLES_VLANTIDX,		0x00b4c4),
	REG_RESERVED(ANA_TABLES_ISDXACCESS),
	REG_RESERVED(ANA_TABLES_ISDXTIDX),
	REG(ANA_TABLES_ENTRYLIM,		0x00b480),
	REG_RESERVED(ANA_TABLES_PTP_ID_HIGH),
	REG_RESERVED(ANA_TABLES_PTP_ID_LOW),
	REG_RESERVED(ANA_TABLES_STREAMACCESS),
	REG_RESERVED(ANA_TABLES_STREAMTIDX),
	REG_RESERVED(ANA_TABLES_SEQ_HISTORY),
	REG_RESERVED(ANA_TABLES_SEQ_MASK),
	REG_RESERVED(ANA_TABLES_SFID_MASK),
	REG_RESERVED(ANA_TABLES_SFIDACCESS),
	REG_RESERVED(ANA_TABLES_SFIDTIDX),
	REG_RESERVED(ANA_MSTI_STATE),
	REG_RESERVED(ANA_OAM_UPM_LM_CNT),
	REG_RESERVED(ANA_SG_ACCESS_CTRL),
	REG_RESERVED(ANA_SG_CONFIG_REG_1),
	REG_RESERVED(ANA_SG_CONFIG_REG_2),
	REG_RESERVED(ANA_SG_CONFIG_REG_3),
	REG_RESERVED(ANA_SG_CONFIG_REG_4),

Annotation

Implementation Notes