brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · 7a9f9ff Raw
72 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Marvell 88E6xxx Switch Hidden Registers support4 *5 * Copyright (c) 2008 Marvell Semiconductor6 *7 * Copyright (c) 2019 Andrew Lunn <andrew@lunn.ch>8 */9 10#include <linux/bitfield.h>11 12#include "chip.h"13#include "port.h"14 15/* The mv88e6390 and mv88e6341 have some hidden registers used for debug and16 * development. The errata also makes use of them.17 */18int mv88e6xxx_port_hidden_write(struct mv88e6xxx_chip *chip, int block,19				int port, int reg, u16 val)20{21	u16 ctrl;22	int err;23 24	err = mv88e6xxx_port_write(chip, MV88E6XXX_PORT_RESERVED_1A_DATA_PORT,25				   MV88E6XXX_PORT_RESERVED_1A, val);26	if (err)27		return err;28 29	ctrl = MV88E6XXX_PORT_RESERVED_1A_BUSY |30	       MV88E6XXX_PORT_RESERVED_1A_WRITE |31	       block << MV88E6XXX_PORT_RESERVED_1A_BLOCK_SHIFT |32	       port << MV88E6XXX_PORT_RESERVED_1A_PORT_SHIFT |33	       reg;34 35	return mv88e6xxx_port_write(chip, MV88E6XXX_PORT_RESERVED_1A_CTRL_PORT,36				    MV88E6XXX_PORT_RESERVED_1A, ctrl);37}38 39int mv88e6xxx_port_hidden_wait(struct mv88e6xxx_chip *chip)40{41	int bit = __bf_shf(MV88E6XXX_PORT_RESERVED_1A_BUSY);42 43	return mv88e6xxx_port_wait_bit(chip,44				       MV88E6XXX_PORT_RESERVED_1A_CTRL_PORT,45				       MV88E6XXX_PORT_RESERVED_1A, bit, 0);46}47 48int mv88e6xxx_port_hidden_read(struct mv88e6xxx_chip *chip, int block, int port,49			       int reg, u16 *val)50{51	u16 ctrl;52	int err;53 54	ctrl = MV88E6XXX_PORT_RESERVED_1A_BUSY |55	       MV88E6XXX_PORT_RESERVED_1A_READ |56	       block << MV88E6XXX_PORT_RESERVED_1A_BLOCK_SHIFT |57	       port << MV88E6XXX_PORT_RESERVED_1A_PORT_SHIFT |58	       reg;59 60	err = mv88e6xxx_port_write(chip, MV88E6XXX_PORT_RESERVED_1A_CTRL_PORT,61				   MV88E6XXX_PORT_RESERVED_1A, ctrl);62	if (err)63		return err;64 65	err = mv88e6xxx_port_hidden_wait(chip);66	if (err)67		return err;68 69	return mv88e6xxx_port_read(chip, MV88E6XXX_PORT_RESERVED_1A_DATA_PORT,70				   MV88E6XXX_PORT_RESERVED_1A, val);71}72