Loading drivers/misc/mei/hbm.c +24 −1 Original line number Diff line number Diff line Loading @@ -372,7 +372,8 @@ static int mei_hbm_prop_req(struct mei_device *dev) * @dev: the device structure * @pg_cmd: the pg command code * * This function returns -EIO on write failure * returns -EIO on write failure * -EOPNOTSUPP if the operation is not supported by the protocol */ int mei_hbm_pg(struct mei_device *dev, u8 pg_cmd) { Loading @@ -381,6 +382,9 @@ int mei_hbm_pg(struct mei_device *dev, u8 pg_cmd) const size_t len = sizeof(struct hbm_power_gate); int ret; if (!dev->hbm_f_pg_supported) return -EOPNOTSUPP; mei_hbm_hdr(mei_hdr, len); req = (struct hbm_power_gate *)dev->wr_msg.data; Loading Loading @@ -660,6 +664,23 @@ static int mei_hbm_fw_disconnect_req(struct mei_device *dev, return 0; } /** * mei_hbm_config_features: check what hbm features and commands * are supported by the fw * * @dev: the device structure */ static void mei_hbm_config_features(struct mei_device *dev) { /* Power Gating Isolation Support */ dev->hbm_f_pg_supported = 0; if (dev->version.major_version > HBM_MAJOR_VERSION_PGI) dev->hbm_f_pg_supported = 1; if (dev->version.major_version == HBM_MAJOR_VERSION_PGI && dev->version.minor_version >= HBM_MINOR_VERSION_PGI) dev->hbm_f_pg_supported = 1; } /** * mei_hbm_version_is_supported - checks whether the driver can Loading Loading @@ -743,6 +764,8 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr) break; } mei_hbm_config_features(dev); if (dev->dev_state != MEI_DEV_INIT_CLIENTS || dev->hbm_state != MEI_HBM_STARTING) { dev_err(&dev->pdev->dev, "hbm: start: state mismatch, [%d, %d]\n", Loading drivers/misc/mei/hw-me.c +1 −5 Original line number Diff line number Diff line Loading @@ -574,11 +574,7 @@ static bool mei_me_pg_is_enabled(struct mei_device *dev) if ((reg & ME_PGIC_HRA) == 0) goto notsupported; if (dev->version.major_version < HBM_MAJOR_VERSION_PGI) goto notsupported; if (dev->version.major_version == HBM_MAJOR_VERSION_PGI && dev->version.minor_version < HBM_MINOR_VERSION_PGI) if (!dev->hbm_f_pg_supported) goto notsupported; return true; Loading drivers/misc/mei/mei_dev.h +4 −0 Original line number Diff line number Diff line Loading @@ -402,6 +402,9 @@ struct mei_cfg { * * @reset_count - limits the number of consecutive resets * @hbm_state - state of host bus message protocol * * @hbm_f_pg_supported - hbm feature pgi protocol * * @pg_event - power gating event * @mem_addr - mem mapped base register address Loading Loading @@ -476,6 +479,7 @@ struct mei_device { } wr_msg; struct hbm_version version; unsigned int hbm_f_pg_supported:1; struct list_head me_clients; DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX); Loading Loading
drivers/misc/mei/hbm.c +24 −1 Original line number Diff line number Diff line Loading @@ -372,7 +372,8 @@ static int mei_hbm_prop_req(struct mei_device *dev) * @dev: the device structure * @pg_cmd: the pg command code * * This function returns -EIO on write failure * returns -EIO on write failure * -EOPNOTSUPP if the operation is not supported by the protocol */ int mei_hbm_pg(struct mei_device *dev, u8 pg_cmd) { Loading @@ -381,6 +382,9 @@ int mei_hbm_pg(struct mei_device *dev, u8 pg_cmd) const size_t len = sizeof(struct hbm_power_gate); int ret; if (!dev->hbm_f_pg_supported) return -EOPNOTSUPP; mei_hbm_hdr(mei_hdr, len); req = (struct hbm_power_gate *)dev->wr_msg.data; Loading Loading @@ -660,6 +664,23 @@ static int mei_hbm_fw_disconnect_req(struct mei_device *dev, return 0; } /** * mei_hbm_config_features: check what hbm features and commands * are supported by the fw * * @dev: the device structure */ static void mei_hbm_config_features(struct mei_device *dev) { /* Power Gating Isolation Support */ dev->hbm_f_pg_supported = 0; if (dev->version.major_version > HBM_MAJOR_VERSION_PGI) dev->hbm_f_pg_supported = 1; if (dev->version.major_version == HBM_MAJOR_VERSION_PGI && dev->version.minor_version >= HBM_MINOR_VERSION_PGI) dev->hbm_f_pg_supported = 1; } /** * mei_hbm_version_is_supported - checks whether the driver can Loading Loading @@ -743,6 +764,8 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr) break; } mei_hbm_config_features(dev); if (dev->dev_state != MEI_DEV_INIT_CLIENTS || dev->hbm_state != MEI_HBM_STARTING) { dev_err(&dev->pdev->dev, "hbm: start: state mismatch, [%d, %d]\n", Loading
drivers/misc/mei/hw-me.c +1 −5 Original line number Diff line number Diff line Loading @@ -574,11 +574,7 @@ static bool mei_me_pg_is_enabled(struct mei_device *dev) if ((reg & ME_PGIC_HRA) == 0) goto notsupported; if (dev->version.major_version < HBM_MAJOR_VERSION_PGI) goto notsupported; if (dev->version.major_version == HBM_MAJOR_VERSION_PGI && dev->version.minor_version < HBM_MINOR_VERSION_PGI) if (!dev->hbm_f_pg_supported) goto notsupported; return true; Loading
drivers/misc/mei/mei_dev.h +4 −0 Original line number Diff line number Diff line Loading @@ -402,6 +402,9 @@ struct mei_cfg { * * @reset_count - limits the number of consecutive resets * @hbm_state - state of host bus message protocol * * @hbm_f_pg_supported - hbm feature pgi protocol * * @pg_event - power gating event * @mem_addr - mem mapped base register address Loading Loading @@ -476,6 +479,7 @@ struct mei_device { } wr_msg; struct hbm_version version; unsigned int hbm_f_pg_supported:1; struct list_head me_clients; DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX); Loading