summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim Pasternak <vadimp@mellanox.com>2019-03-03 12:12:16 +0300
committerDavid S. Miller <davem@davemloft.net>2019-03-04 09:23:00 +0300
commit6a986993e43f176e07c28df560b1cfc3e9b80505 (patch)
tree8ac7d56d3ddd8c5aebc71ac8f1dc46257ed690d0
parent95b75cbd1bc57ec5898517a3fb2f7621f16b26cd (diff)
downloadlinux-6a986993e43f176e07c28df560b1cfc3e9b80505.tar.xz
mlxsw: i2c: Extend initialization by querying resources data
Extend initialization flow by query requests for chip resources data in order to obtain chip's specific capabilities, like the number of ports. Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/i2c.c12
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/minimal.c11
2 files changed, 17 insertions, 6 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c
index 4708acc778e0..06aea1999518 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c
@@ -14,6 +14,7 @@
#include "cmd.h"
#include "core.h"
#include "i2c.h"
+#include "resources.h"
#define MLXSW_I2C_CIR2_BASE 0x72000
#define MLXSW_I2C_CIR_STATUS_OFF 0x18
@@ -499,10 +500,19 @@ mlxsw_i2c_init(void *bus_priv, struct mlxsw_core *mlxsw_core,
struct mlxsw_res *res)
{
struct mlxsw_i2c *mlxsw_i2c = bus_priv;
+ char *mbox;
+ int err;
mlxsw_i2c->core = mlxsw_core;
- return 0;
+ mbox = mlxsw_cmd_mbox_alloc();
+ if (!mbox)
+ return -ENOMEM;
+
+ err = mlxsw_core_resources_query(mlxsw_core, mbox, res);
+
+ mlxsw_cmd_mbox_free(mbox);
+ return err;
}
static void mlxsw_i2c_fini(void *bus_priv)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
index 9108149640b2..68bee9572a1b 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
@@ -333,11 +333,12 @@ static void mlxsw_m_fini(struct mlxsw_core *mlxsw_core)
static const struct mlxsw_config_profile mlxsw_m_config_profile;
static struct mlxsw_driver mlxsw_m_driver = {
- .kind = mlxsw_m_driver_name,
- .priv_size = sizeof(struct mlxsw_m),
- .init = mlxsw_m_init,
- .fini = mlxsw_m_fini,
- .profile = &mlxsw_m_config_profile,
+ .kind = mlxsw_m_driver_name,
+ .priv_size = sizeof(struct mlxsw_m),
+ .init = mlxsw_m_init,
+ .fini = mlxsw_m_fini,
+ .profile = &mlxsw_m_config_profile,
+ .res_query_enabled = true,
};
static const struct i2c_device_id mlxsw_m_i2c_id[] = {