Message ID | 20241001-b4-sparx5-lan969x-switch-driver-v1-10-8c6896fdce66@microchip.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: sparx5: prepare for lan969x switch driver | expand |
On 10/1/2024 6:50 AM, Daniel Machon wrote: > The chip port device index and mode bit can be obtained using the port > number. However the mapping of port number to chip device index and > mode bit differs on Sparx5 and lan969x. Therefore ops out the function. > > Signed-off-by: Daniel Machon <daniel.machon@microchip.com> > Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com> > --- > drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 2 ++ > drivers/net/ethernet/microchip/sparx5/sparx5_main.h | 2 ++ > drivers/net/ethernet/microchip/sparx5/sparx5_port.c | 4 +++- > drivers/net/ethernet/microchip/sparx5/sparx5_port.h | 7 ++++++- > 4 files changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c > index 8b1033c49cfe..8617fc3983cc 100644 > --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c > +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c > @@ -982,6 +982,8 @@ static const struct sparx5_ops sparx5_ops = { > .is_port_5g = &sparx5_port_is_5g, > .is_port_10g = &sparx5_port_is_10g, > .is_port_25g = &sparx5_port_is_25g, > + .get_port_dev_index = &sparx5_port_dev_mapping, > + .get_port_dev_bit = &sparx5_port_dev_mapping, So for sparx5, these are identical operations, but for lan969x these will be different? Ok.
> > The chip port device index and mode bit can be obtained using the port > > number. However the mapping of port number to chip device index and > > mode bit differs on Sparx5 and lan969x. Therefore ops out the function. > > > > Signed-off-by: Daniel Machon <daniel.machon@microchip.com> > > Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com> > > --- > > drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 2 ++ > > drivers/net/ethernet/microchip/sparx5/sparx5_main.h | 2 ++ > > drivers/net/ethernet/microchip/sparx5/sparx5_port.c | 4 +++- > > drivers/net/ethernet/microchip/sparx5/sparx5_port.h | 7 ++++++- > > 4 files changed, 13 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c > > index 8b1033c49cfe..8617fc3983cc 100644 > > --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c > > +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c > > @@ -982,6 +982,8 @@ static const struct sparx5_ops sparx5_ops = { > > .is_port_5g = &sparx5_port_is_5g, > > .is_port_10g = &sparx5_port_is_10g, > > .is_port_25g = &sparx5_port_is_25g, > > + .get_port_dev_index = &sparx5_port_dev_mapping, > > + .get_port_dev_bit = &sparx5_port_dev_mapping, > > So for sparx5, these are identical operations, but for lan969x these > will be different? Ok. > Exactly :-) /Daniel
diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c index 8b1033c49cfe..8617fc3983cc 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -982,6 +982,8 @@ static const struct sparx5_ops sparx5_ops = { .is_port_5g = &sparx5_port_is_5g, .is_port_10g = &sparx5_port_is_10g, .is_port_25g = &sparx5_port_is_25g, + .get_port_dev_index = &sparx5_port_dev_mapping, + .get_port_dev_bit = &sparx5_port_dev_mapping, }; static const struct sparx5_match_data sparx5_desc = { diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h b/drivers/net/ethernet/microchip/sparx5/sparx5_main.h index 5a8a37681312..68d5a14603dc 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.h @@ -265,6 +265,8 @@ struct sparx5_ops { bool (*is_port_5g)(int portno); bool (*is_port_10g)(int portno); bool (*is_port_25g)(int portno); + u32 (*get_port_dev_index)(struct sparx5 *sparx5, int port); + u32 (*get_port_dev_bit)(struct sparx5 *sparx5, int port); }; struct sparx5_main_io_resource { diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_port.c b/drivers/net/ethernet/microchip/sparx5/sparx5_port.c index c5dfe0fa847b..49ff94db0e63 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_port.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_port.c @@ -847,8 +847,10 @@ static int sparx5_port_pcs_high_set(struct sparx5 *sparx5, /* Switch between 1G/2500 and 5G/10G/25G devices */ static void sparx5_dev_switch(struct sparx5 *sparx5, int port, bool hsd) { - int bt_indx = BIT(sparx5_port_dev_index(sparx5, port)); const struct sparx5_ops *ops = sparx5->data->ops; + int bt_indx; + + bt_indx = BIT(ops->get_port_dev_bit(sparx5, port)); if (ops->is_port_5g(port)) { spx5_rmw(hsd ? 0 : bt_indx, diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_port.h b/drivers/net/ethernet/microchip/sparx5/sparx5_port.h index 934e2d3dedbb..9b9bcc6834bc 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_port.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_port.h @@ -62,7 +62,7 @@ static inline u32 sparx5_to_pcs_dev(struct sparx5 *sparx5, int port) return TARGET_PCS25G_BR; } -static inline int sparx5_port_dev_index(struct sparx5 *sparx5, int port) +static inline u32 sparx5_port_dev_mapping(struct sparx5 *sparx5, int port) { if (sparx5_port_is_2g5(port)) return port; @@ -74,6 +74,11 @@ static inline int sparx5_port_dev_index(struct sparx5 *sparx5, int port) return (port - 56); } +static inline u32 sparx5_port_dev_index(struct sparx5 *sparx5, int port) +{ + return sparx5->data->ops->get_port_dev_index(sparx5, port); +} + int sparx5_port_init(struct sparx5 *sparx5, struct sparx5_port *spx5_port, struct sparx5_port_config *conf);