Message ID | 20200515051924.12331-3-mario.kleiner.de@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] drm/amd/display: Expose support for xBGR ordered fp16 formats. | expand |
On 2020-05-15 1:19 a.m., Mario Kleiner wrote: > Testing on a Polaris11 gpu with DCE-11.2 suggests that it > seems to work fine there, so optimistically enable it for > DCE-11 and later. > > Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> Series is: Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Thanks! > --- > drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- > drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- > drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > index 9597fc79d7fa..a043ddae5149 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap = { > .pixel_format_support = { > .argb8888 = true, > .nv12 = false, > - .fp16 = false > + .fp16 = true > }, > > .max_upscale_factor = { > diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > index 4a7796de2ff5..51b3fe502670 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap = { > .pixel_format_support = { > .argb8888 = true, > .nv12 = false, > - .fp16 = false > + .fp16 = true > }, > > .max_upscale_factor = { > diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > index 9a9764cbd78d..8f362e8c1787 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap = { > .pixel_format_support = { > .argb8888 = true, > .nv12 = false, > - .fp16 = false > + .fp16 = true > }, > > .max_upscale_factor = { >
On 2020-05-15 1:19 a.m., Mario Kleiner wrote: > Testing on a Polaris11 gpu with DCE-11.2 suggests that it > seems to work fine there, so optimistically enable it for > DCE-11 and later. > > Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> > --- > drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- > drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- > drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > index 9597fc79d7fa..a043ddae5149 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap = { > .pixel_format_support = { > .argb8888 = true, > .nv12 = false, > - .fp16 = false > + .fp16 = true Carrizo (DCE 11.0) has a HW bug where FP16 scaling doesn't work. I recommend we leave it off here. Harry > }, > > .max_upscale_factor = { > diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > index 4a7796de2ff5..51b3fe502670 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap = { > .pixel_format_support = { > .argb8888 = true, > .nv12 = false, > - .fp16 = false > + .fp16 = true > }, > > .max_upscale_factor = { > diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > index 9a9764cbd78d..8f362e8c1787 100644 > --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap = { > .pixel_format_support = { > .argb8888 = true, > .nv12 = false, > - .fp16 = false > + .fp16 = true > }, > > .max_upscale_factor = { >
On Wed, May 20, 2020 at 12:39 PM Harry Wentland <hwentlan@amd.com> wrote: > > On 2020-05-15 1:19 a.m., Mario Kleiner wrote: > > Testing on a Polaris11 gpu with DCE-11.2 suggests that it > > seems to work fine there, so optimistically enable it for > > DCE-11 and later. > > > > Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> > > --- > > drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- > > drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- > > drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- > > 3 files changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > index 9597fc79d7fa..a043ddae5149 100644 > > --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap = { > > .pixel_format_support = { > > .argb8888 = true, > > .nv12 = false, > > - .fp16 = false > > + .fp16 = true > > Carrizo (DCE 11.0) has a HW bug where FP16 scaling doesn't work. I > recommend we leave it off here. I'll drop this hunk for upstream. Alex > > Harry > > > }, > > > > .max_upscale_factor = { > > diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > index 4a7796de2ff5..51b3fe502670 100644 > > --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap = { > > .pixel_format_support = { > > .argb8888 = true, > > .nv12 = false, > > - .fp16 = false > > + .fp16 = true > > }, > > > > .max_upscale_factor = { > > diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > index 9a9764cbd78d..8f362e8c1787 100644 > > --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap = { > > .pixel_format_support = { > > .argb8888 = true, > > .nv12 = false, > > - .fp16 = false > > + .fp16 = true > > }, > > > > .max_upscale_factor = { > > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
On Wed, May 20, 2020 at 8:25 PM Alex Deucher <alexdeucher@gmail.com> wrote: > On Wed, May 20, 2020 at 12:39 PM Harry Wentland <hwentlan@amd.com> wrote: > > > > On 2020-05-15 1:19 a.m., Mario Kleiner wrote: > > > Testing on a Polaris11 gpu with DCE-11.2 suggests that it > > > seems to work fine there, so optimistically enable it for > > > DCE-11 and later. > > > > > > Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> > > > --- > > > drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- > > > drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- > > > drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- > > > 3 files changed, 3 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > index 9597fc79d7fa..a043ddae5149 100644 > > > --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap = { > > > .pixel_format_support = { > > > .argb8888 = true, > > > .nv12 = false, > > > - .fp16 = false > > > + .fp16 = true > > > > Carrizo (DCE 11.0) has a HW bug where FP16 scaling doesn't work. I > > recommend we leave it off here. > > I'll drop this hunk for upstream. > > Alex > > Ok, no fixup patch needed from myself, thanks Alex. Does the scaling bug refer to scaling the planes (those max_downscale_factor / max_upscale_factor definitions seem to be unused) or the fp16 values itself? What about DCE 8 and DCE 10 hw capabilities wrt. fp16? Should i send fp16 enable patches for those as well? -mario > > > Harry > > > > > }, > > > > > > .max_upscale_factor = { > > > diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > index 4a7796de2ff5..51b3fe502670 100644 > > > --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap = { > > > .pixel_format_support = { > > > .argb8888 = true, > > > .nv12 = false, > > > - .fp16 = false > > > + .fp16 = true > > > }, > > > > > > .max_upscale_factor = { > > > diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > index 9a9764cbd78d..8f362e8c1787 100644 > > > --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap = { > > > .pixel_format_support = { > > > .argb8888 = true, > > > .nv12 = false, > > > - .fp16 = false > > > + .fp16 = true > > > }, > > > > > > .max_upscale_factor = { > > > > > _______________________________________________ > > dri-devel mailing list > > dri-devel@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/dri-devel >
On 2020-05-20 2:44 p.m., Mario Kleiner wrote: > On Wed, May 20, 2020 at 8:25 PM Alex Deucher <alexdeucher@gmail.com > <mailto:alexdeucher@gmail.com>> wrote: > > On Wed, May 20, 2020 at 12:39 PM Harry Wentland <hwentlan@amd.com > <mailto:hwentlan@amd.com>> wrote: > > > > On 2020-05-15 1:19 a.m., Mario Kleiner wrote: > > > Testing on a Polaris11 gpu with DCE-11.2 suggests that it > > > seems to work fine there, so optimistically enable it for > > > DCE-11 and later. > > > > > > Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com > <mailto:mario.kleiner.de@gmail.com>> > > > --- > > > drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- > > > drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- > > > drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- > > > 3 files changed, 3 insertions(+), 3 deletions(-) > > > > > > diff --git > a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > index 9597fc79d7fa..a043ddae5149 100644 > > > --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap = { > > > .pixel_format_support = { > > > .argb8888 = true, > > > .nv12 = false, > > > - .fp16 = false > > > + .fp16 = true > > > > Carrizo (DCE 11.0) has a HW bug where FP16 scaling doesn't work. I > > recommend we leave it off here. > > I'll drop this hunk for upstream. > > Alex > > > Ok, no fixup patch needed from myself, thanks Alex. Does the scaling bug > refer to scaling the planes (those max_downscale_factor / > max_upscale_factor definitions seem to be unused) or the fp16 values itself? > > What about DCE 8 and DCE 10 hw capabilities wrt. fp16? Should i send > fp16 enable patches for those as well? > > -mario Yeah, the upscale and downscale factors were intended to block FP16 accepted and reject the commit but I guess nobody ever added those to atomic check. I reviewed the patch with the idea in mind that we already blocked this on a DC level. We can re-enable it in the caps after this is in I think. Off the top of my head I don't remember what DCE8/DCE10 supports, but I'm also not sure if they even support sending the SDP message for those to really be usable. Regards, Nicholas Kazlauskas > > > > > Harry > > > > > }, > > > > > > .max_upscale_factor = { > > > diff --git > a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > index 4a7796de2ff5..51b3fe502670 100644 > > > --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap = { > > > .pixel_format_support = { > > > .argb8888 = true, > > > .nv12 = false, > > > - .fp16 = false > > > + .fp16 = true > > > }, > > > > > > .max_upscale_factor = { > > > diff --git > a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > index 9a9764cbd78d..8f362e8c1787 100644 > > > --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap = { > > > .pixel_format_support = { > > > .argb8888 = true, > > > .nv12 = false, > > > - .fp16 = false > > > + .fp16 = true > > > }, > > > > > > .max_upscale_factor = { > > > > > _______________________________________________ > > dri-devel mailing list > > dri-devel@lists.freedesktop.org > <mailto:dri-devel@lists.freedesktop.org> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > <https://lists.freedesktop.org/mailman/listinfo/dri-devel> >
On Wed, May 20, 2020 at 9:07 PM Kazlauskas, Nicholas < nicholas.kazlauskas@amd.com> wrote: > On 2020-05-20 2:44 p.m., Mario Kleiner wrote: > > On Wed, May 20, 2020 at 8:25 PM Alex Deucher <alexdeucher@gmail.com > > <mailto:alexdeucher@gmail.com>> wrote: > > > > On Wed, May 20, 2020 at 12:39 PM Harry Wentland <hwentlan@amd.com > > <mailto:hwentlan@amd.com>> wrote: > > > > > > On 2020-05-15 1:19 a.m., Mario Kleiner wrote: > > > > Testing on a Polaris11 gpu with DCE-11.2 suggests that it > > > > seems to work fine there, so optimistically enable it for > > > > DCE-11 and later. > > > > > > > > Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com > > <mailto:mario.kleiner.de@gmail.com>> > > > > --- > > > > drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- > > > > drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- > > > > drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- > > > > 3 files changed, 3 insertions(+), 3 deletions(-) > > > > > > > > diff --git > > a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > > index 9597fc79d7fa..a043ddae5149 100644 > > > > --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > > +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c > > > > @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap > = { > > > > .pixel_format_support = { > > > > .argb8888 = true, > > > > .nv12 = false, > > > > - .fp16 = false > > > > + .fp16 = true > > > > > > Carrizo (DCE 11.0) has a HW bug where FP16 scaling doesn't work. I > > > recommend we leave it off here. > > > > I'll drop this hunk for upstream. > > > > Alex > > > > > > Ok, no fixup patch needed from myself, thanks Alex. Does the scaling bug > > refer to scaling the planes (those max_downscale_factor / > > max_upscale_factor definitions seem to be unused) or the fp16 values > itself? > > > > What about DCE 8 and DCE 10 hw capabilities wrt. fp16? Should i send > > fp16 enable patches for those as well? > > > > -mario > > Yeah, the upscale and downscale factors were intended to block FP16 > accepted and reject the commit but I guess nobody ever added those to > atomic check. > > I reviewed the patch with the idea in mind that we already blocked this > on a DC level. We can re-enable it in the caps after this is in I think. > > Off the top of my head I don't remember what DCE8/DCE10 supports, but > I'm also not sure if they even support sending the SDP message for those > to really be usable. > While HDR is the typical user for fp16, even on SDR displays, without any HDR signalling, fp16 should give an additional bit of precision ~ 11 bpc effective in standard 0.0 - 1.0 unorm range on a 12 bit pipeline with a 12 bpc panel or even on a 10 bpc panel with dithering. Useful for neuroscience/medical research applications or the color precision obsessed people. I take every bit i can get ;) -mario > Regards, > Nicholas Kazlauskas > > > > > > > > > Harry > > > > > > > }, > > > > > > > > .max_upscale_factor = { > > > > diff --git > > a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > > index 4a7796de2ff5..51b3fe502670 100644 > > > > --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > > +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c > > > > @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap > = { > > > > .pixel_format_support = { > > > > .argb8888 = true, > > > > .nv12 = false, > > > > - .fp16 = false > > > > + .fp16 = true > > > > }, > > > > > > > > .max_upscale_factor = { > > > > diff --git > > a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > > index 9a9764cbd78d..8f362e8c1787 100644 > > > > --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > > +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c > > > > @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap > = { > > > > .pixel_format_support = { > > > > .argb8888 = true, > > > > .nv12 = false, > > > > - .fp16 = false > > > > + .fp16 = true > > > > }, > > > > > > > > .max_upscale_factor = { > > > > > > > _______________________________________________ > > > dri-devel mailing list > > > dri-devel@lists.freedesktop.org > > <mailto:dri-devel@lists.freedesktop.org> > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > <https://lists.freedesktop.org/mailman/listinfo/dri-devel> > > > >
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c index 9597fc79d7fa..a043ddae5149 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c @@ -410,7 +410,7 @@ static const struct dc_plane_cap plane_cap = { .pixel_format_support = { .argb8888 = true, .nv12 = false, - .fp16 = false + .fp16 = true }, .max_upscale_factor = { diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c index 4a7796de2ff5..51b3fe502670 100644 --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c @@ -411,7 +411,7 @@ static const struct dc_plane_cap plane_cap = { .pixel_format_support = { .argb8888 = true, .nv12 = false, - .fp16 = false + .fp16 = true }, .max_upscale_factor = { diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c index 9a9764cbd78d..8f362e8c1787 100644 --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c @@ -516,7 +516,7 @@ static const struct dc_plane_cap plane_cap = { .pixel_format_support = { .argb8888 = true, .nv12 = false, - .fp16 = false + .fp16 = true }, .max_upscale_factor = {
Testing on a Polaris11 gpu with DCE-11.2 suggests that it seems to work fine there, so optimistically enable it for DCE-11 and later. Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com> --- drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 2 +- drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 2 +- drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)