Re: [PATCH v1 2/2] drm/komeda: Refactor sysfs node "config_id"
On Tue, Nov 26, 2019 at 01:08:05PM +0100, Daniel Vetter wrote: > On Tue, Nov 26, 2019 at 10:54:47AM +, james qian wang (Arm Technology > China) wrote: > > From: "James Qian Wang (Arm Technology China)" > > > > Split sysfs config_id bitfiles to multiple separated sysfs files. > > > > Signed-off-by: James Qian Wang (Arm Technology China) > > > > I guess Dave questions werent quite clear, this looks like uapi that's > consumed by hwc, so the userspace needs to be open source. Plus it needs > to be discussed/reviewed like any other kms uapi extensions, with a > critical eye whether this makes sense to add to a supposedly cross-vendor > interface. > Hi Dave & Daniel: I think some komeda sysfs nodes can be added as cross-vendor. - core_id: which actually is like vendor_id/subsystem_device_id/revision in PCI dev, Maybe we can add a util funcs to fake these sysfs nodes for none PCI-dev like komeda device_info_sysfs_add(struct device *dev, u16 vendor, u16 subsystem_vendor, u16 subsystem_device, u8 revision); The arguments: vendor: I'd like to use the PCI vendor_ID, since with that user can see a unique ID, and easy to indentify different devices. subsystem_vendor/device/revision: device specific. - line_size. This actually is mode_config->max_width, but current drm still use this value to restrict the fb->width, but our HW supports crop, we don't have such limition. we can not set the real line_size to max_width. And I saw there is a fix: https://patchwork.freedesktop.org/patch/333454/ with this fix, we can directly use mode_config->max_width Beside that we still needs some komeda specific node like: - aclk_hz: for expose display engine clock. - num_scalers: per pipeline scalers - num_pipes: number of display pipelines. For the open sourced user space, we're trying to switch to drm_hwcomposer, and drop our internal hwcomposer. but that may need time. Can we start from porting our specific test to IGT for komeda private uapi coverage. Thanks James > I suspect the right thing to do here is to push the revert. From a quick > look at git history this landed together with the other kms properties in > komeda which we reverted already. > -Daniel > > > --- > > .../drm/arm/display/include/malidp_product.h | 13 --- > > .../gpu/drm/arm/display/komeda/komeda_sysfs.c | 80 ++- > > 2 files changed, 62 insertions(+), 31 deletions(-) > > > > diff --git a/drivers/gpu/drm/arm/display/include/malidp_product.h > > b/drivers/gpu/drm/arm/display/include/malidp_product.h > > index dbd3d4765065..b21f4aa15c95 100644 > > --- a/drivers/gpu/drm/arm/display/include/malidp_product.h > > +++ b/drivers/gpu/drm/arm/display/include/malidp_product.h > > @@ -21,17 +21,4 @@ > > #define MALIDP_D71_PRODUCT_ID 0x0071 > > #define MALIDP_D32_PRODUCT_ID 0x0032 > > > > -union komeda_config_id { > > - struct { > > - __u32 max_line_sz:16, > > - n_pipelines:2, > > - n_scalers:2, /* number of scalers per pipeline */ > > - n_layers:3, /* number of layers per pipeline */ > > - n_richs:3, /* number of rich layers per pipeline */ > > - side_by_side:1, /* if HW works on side_by_side mode */ > > - reserved_bits:5; > > - }; > > - __u32 value; > > -}; > > - > > #endif /* _MALIDP_PRODUCT_H_ */ > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > > b/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > > index 740f095b4ca5..5effab795dc1 100644 > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > > @@ -18,28 +18,67 @@ core_id_show(struct device *dev, struct > > device_attribute *attr, char *buf) > > static DEVICE_ATTR_RO(core_id); > > > > static ssize_t > > -config_id_show(struct device *dev, struct device_attribute *attr, char > > *buf) > > +line_size_show(struct device *dev, struct device_attribute *attr, char > > *buf) > > { > > struct komeda_dev *mdev = dev_to_mdev(dev); > > struct komeda_pipeline *pipe = mdev->pipelines[0]; > > - union komeda_config_id config_id; > > - int i; > > - > > - memset(_id, 0, sizeof(config_id)); > > - > > - config_id.max_line_sz = pipe->layers[0]->hsize_in.end; > > - config_id.side_by_side = mdev->side_by_side; > > - config_id.n_pipelines = mdev->n_pipelines; > > - config_id.n_scalers = pipe->n_scalers; > > - config_id.n_layers = pipe->n_layers; > > - config_id.n_richs = 0; > > - for (i = 0; i < pipe->n_layers; i++) { > > + > > + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->layers[0]->hsize_in.end); > > +} > > +static DEVICE_ATTR_RO(line_size); > > + > > +static ssize_t > > +n_pipelines_show(struct device *dev, struct device_attribute *attr, char > > *buf) > > +{ > > + struct komeda_dev *mdev = dev_to_mdev(dev); > > + > > + return snprintf(buf,
Re: [PATCH v1 2/2] drm/komeda: Refactor sysfs node "config_id"
On Tue, Nov 26, 2019 at 10:54:47AM +, james qian wang (Arm Technology China) wrote: > From: "James Qian Wang (Arm Technology China)" > > Split sysfs config_id bitfiles to multiple separated sysfs files. > > Signed-off-by: James Qian Wang (Arm Technology China) > I guess Dave questions werent quite clear, this looks like uapi that's consumed by hwc, so the userspace needs to be open source. Plus it needs to be discussed/reviewed like any other kms uapi extensions, with a critical eye whether this makes sense to add to a supposedly cross-vendor interface. I suspect the right thing to do here is to push the revert. From a quick look at git history this landed together with the other kms properties in komeda which we reverted already. -Daniel > --- > .../drm/arm/display/include/malidp_product.h | 13 --- > .../gpu/drm/arm/display/komeda/komeda_sysfs.c | 80 ++- > 2 files changed, 62 insertions(+), 31 deletions(-) > > diff --git a/drivers/gpu/drm/arm/display/include/malidp_product.h > b/drivers/gpu/drm/arm/display/include/malidp_product.h > index dbd3d4765065..b21f4aa15c95 100644 > --- a/drivers/gpu/drm/arm/display/include/malidp_product.h > +++ b/drivers/gpu/drm/arm/display/include/malidp_product.h > @@ -21,17 +21,4 @@ > #define MALIDP_D71_PRODUCT_ID0x0071 > #define MALIDP_D32_PRODUCT_ID0x0032 > > -union komeda_config_id { > - struct { > - __u32 max_line_sz:16, > - n_pipelines:2, > - n_scalers:2, /* number of scalers per pipeline */ > - n_layers:3, /* number of layers per pipeline */ > - n_richs:3, /* number of rich layers per pipeline */ > - side_by_side:1, /* if HW works on side_by_side mode */ > - reserved_bits:5; > - }; > - __u32 value; > -}; > - > #endif /* _MALIDP_PRODUCT_H_ */ > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > b/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > index 740f095b4ca5..5effab795dc1 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c > @@ -18,28 +18,67 @@ core_id_show(struct device *dev, struct device_attribute > *attr, char *buf) > static DEVICE_ATTR_RO(core_id); > > static ssize_t > -config_id_show(struct device *dev, struct device_attribute *attr, char *buf) > +line_size_show(struct device *dev, struct device_attribute *attr, char *buf) > { > struct komeda_dev *mdev = dev_to_mdev(dev); > struct komeda_pipeline *pipe = mdev->pipelines[0]; > - union komeda_config_id config_id; > - int i; > - > - memset(_id, 0, sizeof(config_id)); > - > - config_id.max_line_sz = pipe->layers[0]->hsize_in.end; > - config_id.side_by_side = mdev->side_by_side; > - config_id.n_pipelines = mdev->n_pipelines; > - config_id.n_scalers = pipe->n_scalers; > - config_id.n_layers = pipe->n_layers; > - config_id.n_richs = 0; > - for (i = 0; i < pipe->n_layers; i++) { > + > + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->layers[0]->hsize_in.end); > +} > +static DEVICE_ATTR_RO(line_size); > + > +static ssize_t > +n_pipelines_show(struct device *dev, struct device_attribute *attr, char > *buf) > +{ > + struct komeda_dev *mdev = dev_to_mdev(dev); > + > + return snprintf(buf, PAGE_SIZE, "%d\n", mdev->n_pipelines); > +} > +static DEVICE_ATTR_RO(n_pipelines); > + > +static ssize_t > +n_layers_show(struct device *dev, struct device_attribute *attr, char *buf) > +{ > + struct komeda_dev *mdev = dev_to_mdev(dev); > + struct komeda_pipeline *pipe = mdev->pipelines[0]; > + > + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->n_layers); > +} > +static DEVICE_ATTR_RO(n_layers); > + > +static ssize_t > +n_rich_layers_show(struct device *dev, struct device_attribute *attr, char > *buf) > +{ > + struct komeda_dev *mdev = dev_to_mdev(dev); > + struct komeda_pipeline *pipe = mdev->pipelines[0]; > + int i, n_richs = 0; > + > + for (i = 0; i < pipe->n_layers; i++) > if (pipe->layers[i]->layer_type == KOMEDA_FMT_RICH_LAYER) > - config_id.n_richs++; > - } > - return snprintf(buf, PAGE_SIZE, "0x%08x\n", config_id.value); > + n_richs++; > + > + return snprintf(buf, PAGE_SIZE, "%d\n", n_richs); > +} > +static DEVICE_ATTR_RO(n_rich_layers); > + > +static ssize_t > +n_scalers_show(struct device *dev, struct device_attribute *attr, char *buf) > +{ > + struct komeda_dev *mdev = dev_to_mdev(dev); > + struct komeda_pipeline *pipe = mdev->pipelines[0]; > + > + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->n_scalers); > +} > +static DEVICE_ATTR_RO(n_scalers); > + > +static ssize_t > +side_by_side_show(struct device *dev, struct device_attribute *attr, char > *buf) > +{ > + struct komeda_dev *mdev = dev_to_mdev(dev); > + > + return snprintf(buf, PAGE_SIZE, "%d\n",
[PATCH v1 2/2] drm/komeda: Refactor sysfs node "config_id"
From: "James Qian Wang (Arm Technology China)" Split sysfs config_id bitfiles to multiple separated sysfs files. Signed-off-by: James Qian Wang (Arm Technology China) --- .../drm/arm/display/include/malidp_product.h | 13 --- .../gpu/drm/arm/display/komeda/komeda_sysfs.c | 80 ++- 2 files changed, 62 insertions(+), 31 deletions(-) diff --git a/drivers/gpu/drm/arm/display/include/malidp_product.h b/drivers/gpu/drm/arm/display/include/malidp_product.h index dbd3d4765065..b21f4aa15c95 100644 --- a/drivers/gpu/drm/arm/display/include/malidp_product.h +++ b/drivers/gpu/drm/arm/display/include/malidp_product.h @@ -21,17 +21,4 @@ #define MALIDP_D71_PRODUCT_ID 0x0071 #define MALIDP_D32_PRODUCT_ID 0x0032 -union komeda_config_id { - struct { - __u32 max_line_sz:16, - n_pipelines:2, - n_scalers:2, /* number of scalers per pipeline */ - n_layers:3, /* number of layers per pipeline */ - n_richs:3, /* number of rich layers per pipeline */ - side_by_side:1, /* if HW works on side_by_side mode */ - reserved_bits:5; - }; - __u32 value; -}; - #endif /* _MALIDP_PRODUCT_H_ */ diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c b/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c index 740f095b4ca5..5effab795dc1 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_sysfs.c @@ -18,28 +18,67 @@ core_id_show(struct device *dev, struct device_attribute *attr, char *buf) static DEVICE_ATTR_RO(core_id); static ssize_t -config_id_show(struct device *dev, struct device_attribute *attr, char *buf) +line_size_show(struct device *dev, struct device_attribute *attr, char *buf) { struct komeda_dev *mdev = dev_to_mdev(dev); struct komeda_pipeline *pipe = mdev->pipelines[0]; - union komeda_config_id config_id; - int i; - - memset(_id, 0, sizeof(config_id)); - - config_id.max_line_sz = pipe->layers[0]->hsize_in.end; - config_id.side_by_side = mdev->side_by_side; - config_id.n_pipelines = mdev->n_pipelines; - config_id.n_scalers = pipe->n_scalers; - config_id.n_layers = pipe->n_layers; - config_id.n_richs = 0; - for (i = 0; i < pipe->n_layers; i++) { + + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->layers[0]->hsize_in.end); +} +static DEVICE_ATTR_RO(line_size); + +static ssize_t +n_pipelines_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct komeda_dev *mdev = dev_to_mdev(dev); + + return snprintf(buf, PAGE_SIZE, "%d\n", mdev->n_pipelines); +} +static DEVICE_ATTR_RO(n_pipelines); + +static ssize_t +n_layers_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct komeda_dev *mdev = dev_to_mdev(dev); + struct komeda_pipeline *pipe = mdev->pipelines[0]; + + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->n_layers); +} +static DEVICE_ATTR_RO(n_layers); + +static ssize_t +n_rich_layers_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct komeda_dev *mdev = dev_to_mdev(dev); + struct komeda_pipeline *pipe = mdev->pipelines[0]; + int i, n_richs = 0; + + for (i = 0; i < pipe->n_layers; i++) if (pipe->layers[i]->layer_type == KOMEDA_FMT_RICH_LAYER) - config_id.n_richs++; - } - return snprintf(buf, PAGE_SIZE, "0x%08x\n", config_id.value); + n_richs++; + + return snprintf(buf, PAGE_SIZE, "%d\n", n_richs); +} +static DEVICE_ATTR_RO(n_rich_layers); + +static ssize_t +n_scalers_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct komeda_dev *mdev = dev_to_mdev(dev); + struct komeda_pipeline *pipe = mdev->pipelines[0]; + + return snprintf(buf, PAGE_SIZE, "%d\n", pipe->n_scalers); +} +static DEVICE_ATTR_RO(n_scalers); + +static ssize_t +side_by_side_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct komeda_dev *mdev = dev_to_mdev(dev); + + return snprintf(buf, PAGE_SIZE, "%d\n", mdev->side_by_side); } -static DEVICE_ATTR_RO(config_id); +static DEVICE_ATTR_RO(side_by_side); static ssize_t aclk_hz_show(struct device *dev, struct device_attribute *attr, char *buf) @@ -52,7 +91,12 @@ static DEVICE_ATTR_RO(aclk_hz); static struct attribute *komeda_sysfs_entries[] = { _attr_core_id.attr, - _attr_config_id.attr, + _attr_line_size.attr, + _attr_n_pipelines.attr, + _attr_n_layers.attr, + _attr_n_rich_layers.attr, + _attr_n_scalers.attr, + _attr_side_by_side.attr, _attr_aclk_hz.attr, NULL, }; -- 2.20.1 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel