On Tue, Jan 19, 2021 at 09:55:18PM +0100, Marek Vasut wrote: > The KSZ8795 switch has 4 external ports {0,1,2,3} and 1 CPU port {4}, so > does the KSZ8765. The KSZ8794 seems to be repackaged KSZ8795 with different > ID and port 3 not routed out, however the port 3 registers are present in > the silicon, so the KSZ8794 switch has 3 external ports {0,1,2} and 1 CPU > port {4}. Currently the driver always uses the last port as CPU port, on > KSZ8795/KSZ8765 that is port 4 and that is OK, but on KSZ8794 that is port > 3 and that is not OK, as it must also be port 4. > > This patch adjusts the driver such that it always registers a switch with > 5 ports total (4 external ports, 1 CPU port), always sets the CPU port to > switch port 4, and then configures the external port mask according to > the switch model -- 3 ports for KSZ8794 and 4 for KSZ8795/KSZ8765.
Hi Marek What appears to be missing is any checks for somebody trying to use the 'somewhat non-existent' port. Assuming all the drivers set dev->port_mask properly, i think you can add a check to ksz_enable_port() and return -EINVAL if the requested port is not a member of port_mask. Andrew