2023-04-28 22:37:51

by Abhinav Kumar

[permalink] [raw]
Subject: [PATCH v3 1/4] drm/msm/dpu: remove DPU_DSPP_GC handling in dspp flush

Gamma correction blocks (GC) are not used today so lets remove
the usage of DPU_DSPP_GC in the dspp flush to make it easier
to remove GC from the catalog.

We can add this back when GC is properly supported in DPU with
one of the standard DRM properties.

changes in v3:
- drop the link tag which was auto added before

Signed-off-by: Abhinav Kumar <[email protected]>
Reviewed-by: Dmitry Baryshkov <[email protected]>
Reviewed-by: Marijn Suijten <[email protected]>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 3 ---
1 file changed, 3 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
index bbdc95ce374a..57adaebab563 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
@@ -336,9 +336,6 @@ static void dpu_hw_ctl_update_pending_flush_dspp_sub_blocks(
case DPU_DSPP_PCC:
ctx->pending_dspp_flush_mask[dspp - DSPP_0] |= BIT(4);
break;
- case DPU_DSPP_GC:
- ctx->pending_dspp_flush_mask[dspp - DSPP_0] |= BIT(5);
- break;
default:
return;
}
--
2.40.1


2023-04-28 22:37:53

by Abhinav Kumar

[permalink] [raw]
Subject: [PATCH v3 2/4] drm/msm/dpu: remove DPU_DSPP_IGC handling in dspp flush

Inverse gamma correction blocks (IGC) are not used today so lets
remove the usage of DPU_DSPP_IGC in the DSPP flush to make it easier
to remove IGC from the catalog.

We can add this back when IGC is properly supported in DPU with
one of the standard DRM properties.

changes in v3:
- minor change dspp -> DSPP in commit text

Signed-off-by: Abhinav Kumar <[email protected]>
Reviewed-by: Dmitry Baryshkov <[email protected]>
Reviewed-by: Marijn Suijten <[email protected]>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 3 ---
1 file changed, 3 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
index 57adaebab563..b2a1f83ac72c 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c
@@ -330,9 +330,6 @@ static void dpu_hw_ctl_update_pending_flush_dspp_sub_blocks(
return;

switch (dspp_sub_blk) {
- case DPU_DSPP_IGC:
- ctx->pending_dspp_flush_mask[dspp - DSPP_0] |= BIT(2);
- break;
case DPU_DSPP_PCC:
ctx->pending_dspp_flush_mask[dspp - DSPP_0] |= BIT(4);
break;
--
2.40.1

2023-04-28 22:38:20

by Abhinav Kumar

[permalink] [raw]
Subject: [PATCH v3 4/4] drm/msm/dpu: drop DSPP_MSM8998_MASK from hw catalog

Since GC and IGC masks have now been dropped DSPP_MSM8998_MASK
is same as DSPP_SC7180_MASK. Since DSPP_SC7180_MASK is used more
than DSPP_MSM8998_MASK, lets drop the latter.

Signed-off-by: Abhinav Kumar <[email protected]>
Reviewed-by: Dmitry Baryshkov <[email protected]>
Reviewed-by: Marijn Suijten <[email protected]>
---
drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 4 ++--
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 --
2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
index bdcd554fc8a8..a4679f72a262 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
@@ -127,9 +127,9 @@ static const struct dpu_pingpong_cfg msm8998_pp[] = {
};

static const struct dpu_dspp_cfg msm8998_dspp[] = {
- DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
+ DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
&msm8998_dspp_sblk),
- DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
+ DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
&msm8998_dspp_sblk),
};

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 791a6fc8bdbf..efd466f6122b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -91,8 +91,6 @@

#define MERGE_3D_SM8150_MASK (0)

-#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC)
-
#define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)

#define INTF_SDM845_MASK (0)
--
2.40.1

2023-04-28 22:38:47

by Abhinav Kumar

[permalink] [raw]
Subject: [PATCH v3 3/4] drm/msm/dpu: remove GC and IGC related code from dpu catalog

Gamma Correction (GC) and Inverse Gamma Correction(IGC) is
currently unused. In addition dpu_dspp_sub_blks didn't even have an igc
member describing the block.

Drop related code from the dpu hardware catalog otherwise this becomes a
burden to carry across chipsets in the catalog.

changes in v3:
- drop IGC related code from dpu_hw_catalog too
- update commit text accordingly

Signed-off-by: Abhinav Kumar <[email protected]>
Reviewed-by: Dmitry Baryshkov <[email protected]>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 10 ----------
2 files changed, 1 insertion(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 5d994bce696f..791a6fc8bdbf 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -91,7 +91,7 @@

#define MERGE_3D_SM8150_MASK (0)

-#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)
+#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC)

#define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)

@@ -449,8 +449,6 @@ static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
.pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
.len = 0x90, .version = 0x10007},
- .gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
- .len = 0x90, .version = 0x10007},
};

static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index 71584cd56fd7..1230739e37d4 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -127,13 +127,9 @@ enum {
/**
* DSPP sub-blocks
* @DPU_DSPP_PCC Panel color correction block
- * @DPU_DSPP_GC Gamma correction block
- * @DPU_DSPP_IGC Inverse gamma correction block
*/
enum {
DPU_DSPP_PCC = 0x1,
- DPU_DSPP_GC,
- DPU_DSPP_IGC,
DPU_DSPP_MAX
};

@@ -398,7 +394,6 @@ struct dpu_caps {
* @hsic:
* @memcolor:
* @pcc_blk:
- * @igc_blk:
* @format_list: Pointer to list of supported formats
* @num_formats: Number of supported formats
* @virt_format_list: Pointer to list of supported formats for virtual planes
@@ -419,7 +414,6 @@ struct dpu_sspp_sub_blks {
struct dpu_pp_blk hsic_blk;
struct dpu_pp_blk memcolor_blk;
struct dpu_pp_blk pcc_blk;
- struct dpu_pp_blk igc_blk;

const u32 *format_list;
u32 num_formats;
@@ -433,22 +427,18 @@ struct dpu_sspp_sub_blks {
* @maxwidth: Max pixel width supported by this mixer
* @maxblendstages: Max number of blend-stages supported
* @blendstage_base: Blend-stage register base offset
- * @gc: gamma correction block
*/
struct dpu_lm_sub_blks {
u32 maxwidth;
u32 maxblendstages;
u32 blendstage_base[MAX_BLOCKS];
- struct dpu_pp_blk gc;
};

/**
* struct dpu_dspp_sub_blks: Information of DSPP block
- * @gc : gamma correction block
* @pcc: pixel color correction block
*/
struct dpu_dspp_sub_blks {
- struct dpu_pp_blk gc;
struct dpu_pp_blk pcc;
};

--
2.40.1

2023-05-18 19:58:32

by Marijn Suijten

[permalink] [raw]
Subject: Re: [PATCH v3 3/4] drm/msm/dpu: remove GC and IGC related code from dpu catalog

On 2023-04-28 15:36:45, Abhinav Kumar wrote:
> Gamma Correction (GC) and Inverse Gamma Correction(IGC) is
> currently unused. In addition dpu_dspp_sub_blks didn't even have an igc
> member describing the block.
>
> Drop related code from the dpu hardware catalog otherwise this becomes a
> burden to carry across chipsets in the catalog.
>
> changes in v3:
> - drop IGC related code from dpu_hw_catalog too
> - update commit text accordingly
>
> Signed-off-by: Abhinav Kumar <[email protected]>
> Reviewed-by: Dmitry Baryshkov <[email protected]>

Reviewed-by: Marijn Suijten <[email protected]>

> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 4 +---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 10 ----------
> 2 files changed, 1 insertion(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 5d994bce696f..791a6fc8bdbf 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -91,7 +91,7 @@
>
> #define MERGE_3D_SM8150_MASK (0)
>
> -#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC)

Oops we weren't even using parenthesis here before...

> +#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC)
>
> #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
>
> @@ -449,8 +449,6 @@ static const struct dpu_lm_sub_blks qcm2290_lm_sblk = {
> static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = {
> .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700,
> .len = 0x90, .version = 0x10007},
> - .gc = { .id = DPU_DSPP_GC, .base = 0x17c0,
> - .len = 0x90, .version = 0x10007},
> };
>
> static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index 71584cd56fd7..1230739e37d4 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -127,13 +127,9 @@ enum {
> /**
> * DSPP sub-blocks
> * @DPU_DSPP_PCC Panel color correction block
> - * @DPU_DSPP_GC Gamma correction block
> - * @DPU_DSPP_IGC Inverse gamma correction block
> */
> enum {
> DPU_DSPP_PCC = 0x1,
> - DPU_DSPP_GC,
> - DPU_DSPP_IGC,
> DPU_DSPP_MAX
> };
>
> @@ -398,7 +394,6 @@ struct dpu_caps {
> * @hsic:
> * @memcolor:
> * @pcc_blk:
> - * @igc_blk:
> * @format_list: Pointer to list of supported formats
> * @num_formats: Number of supported formats
> * @virt_format_list: Pointer to list of supported formats for virtual planes
> @@ -419,7 +414,6 @@ struct dpu_sspp_sub_blks {
> struct dpu_pp_blk hsic_blk;
> struct dpu_pp_blk memcolor_blk;
> struct dpu_pp_blk pcc_blk;
> - struct dpu_pp_blk igc_blk;
>
> const u32 *format_list;
> u32 num_formats;
> @@ -433,22 +427,18 @@ struct dpu_sspp_sub_blks {
> * @maxwidth: Max pixel width supported by this mixer
> * @maxblendstages: Max number of blend-stages supported
> * @blendstage_base: Blend-stage register base offset
> - * @gc: gamma correction block
> */
> struct dpu_lm_sub_blks {
> u32 maxwidth;
> u32 maxblendstages;
> u32 blendstage_base[MAX_BLOCKS];
> - struct dpu_pp_blk gc;
> };
>
> /**
> * struct dpu_dspp_sub_blks: Information of DSPP block
> - * @gc : gamma correction block
> * @pcc: pixel color correction block
> */
> struct dpu_dspp_sub_blks {
> - struct dpu_pp_blk gc;
> struct dpu_pp_blk pcc;
> };
>
> --
> 2.40.1
>

2023-05-18 20:16:40

by Marijn Suijten

[permalink] [raw]
Subject: Re: [PATCH v3 4/4] drm/msm/dpu: drop DSPP_MSM8998_MASK from hw catalog

On 2023-04-28 15:36:46, Abhinav Kumar wrote:
> Since GC and IGC masks have now been dropped DSPP_MSM8998_MASK
> is same as DSPP_SC7180_MASK. Since DSPP_SC7180_MASK is used more

is *the* same

> than DSPP_MSM8998_MASK, lets drop the latter.
>
> Signed-off-by: Abhinav Kumar <[email protected]>
> Reviewed-by: Dmitry Baryshkov <[email protected]>
> Reviewed-by: Marijn Suijten <[email protected]>
> ---
> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 4 ++--
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 --
> 2 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
> index bdcd554fc8a8..a4679f72a262 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
> @@ -127,9 +127,9 @@ static const struct dpu_pingpong_cfg msm8998_pp[] = {
> };
>
> static const struct dpu_dspp_cfg msm8998_dspp[] = {
> - DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
> + DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
> &msm8998_dspp_sblk),
> - DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
> + DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
> &msm8998_dspp_sblk),
> };
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 791a6fc8bdbf..efd466f6122b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -91,8 +91,6 @@
>
> #define MERGE_3D_SM8150_MASK (0)
>
> -#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC)
> -
> #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)

Should we add preliminary parenthesis around this?

- Marijn

>
> #define INTF_SDM845_MASK (0)
> --
> 2.40.1
>

2023-05-18 21:43:54

by Dmitry Baryshkov

[permalink] [raw]
Subject: Re: [PATCH v3 4/4] drm/msm/dpu: drop DSPP_MSM8998_MASK from hw catalog

On 18/05/2023 22:41, Marijn Suijten wrote:
> On 2023-04-28 15:36:46, Abhinav Kumar wrote:
>> Since GC and IGC masks have now been dropped DSPP_MSM8998_MASK
>> is same as DSPP_SC7180_MASK. Since DSPP_SC7180_MASK is used more
>
> is *the* same

And, I think, a comma is missing before DSPP_MSM8998_MASK.

Note: since the English language is not native for most of the
developers, I usually don't nitpick on these issues provided we can
understand the message without too much trouble (and the mistake doesn't
stand out aloud, begging for it to be fixed).

I will fix missing articles when applying, if I don't forget.

>
>> than DSPP_MSM8998_MASK, lets drop the latter.
>>
>> Signed-off-by: Abhinav Kumar <[email protected]>
>> Reviewed-by: Dmitry Baryshkov <[email protected]>
>> Reviewed-by: Marijn Suijten <[email protected]>
>> ---
>> drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h | 4 ++--
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 --
>> 2 files changed, 2 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
>> index bdcd554fc8a8..a4679f72a262 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_3_0_msm8998.h
>> @@ -127,9 +127,9 @@ static const struct dpu_pingpong_cfg msm8998_pp[] = {
>> };
>>
>> static const struct dpu_dspp_cfg msm8998_dspp[] = {
>> - DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK,
>> + DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK,
>> &msm8998_dspp_sblk),
>> - DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK,
>> + DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK,
>> &msm8998_dspp_sblk),
>> };
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> index 791a6fc8bdbf..efd466f6122b 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> @@ -91,8 +91,6 @@
>>
>> #define MERGE_3D_SM8150_MASK (0)
>>
>> -#define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC)
>> -
>> #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC)
>
> Should we add preliminary parenthesis around this?
>
> - Marijn
>
>>
>> #define INTF_SDM845_MASK (0)
>> --
>> 2.40.1
>>

--
With best wishes
Dmitry


2023-05-18 21:50:28

by Marijn Suijten

[permalink] [raw]
Subject: Re: [PATCH v3 4/4] drm/msm/dpu: drop DSPP_MSM8998_MASK from hw catalog

On 2023-05-19 00:26:33, Dmitry Baryshkov wrote:
> On 18/05/2023 22:41, Marijn Suijten wrote:
> > On 2023-04-28 15:36:46, Abhinav Kumar wrote:
> >> Since GC and IGC masks have now been dropped DSPP_MSM8998_MASK
> >> is same as DSPP_SC7180_MASK. Since DSPP_SC7180_MASK is used more
> >
> > is *the* same
>
> And, I think, a comma is missing before DSPP_MSM8998_MASK.

Possible, but not needed I think; both would work.

> Note: since the English language is not native for most of the
> developers, I usually don't nitpick on these issues provided we can
> understand the message without too much trouble (and the mistake doesn't
> stand out aloud, begging for it to be fixed).

I hope you don't mind me pointing them out when they make the reader go
"huh, a word is missing here", breaking my sentence-parser.

- Marijn

> I will fix missing articles when applying, if I don't forget.

<snip>

2023-05-18 22:24:34

by Abhinav Kumar

[permalink] [raw]
Subject: Re: [PATCH v3 4/4] drm/msm/dpu: drop DSPP_MSM8998_MASK from hw catalog



On 5/18/2023 2:36 PM, Marijn Suijten wrote:
> On 2023-05-19 00:26:33, Dmitry Baryshkov wrote:
>> On 18/05/2023 22:41, Marijn Suijten wrote:
>>> On 2023-04-28 15:36:46, Abhinav Kumar wrote:
>>>> Since GC and IGC masks have now been dropped DSPP_MSM8998_MASK
>>>> is same as DSPP_SC7180_MASK. Since DSPP_SC7180_MASK is used more
>>>
>>> is *the* same
>>
>> And, I think, a comma is missing before DSPP_MSM8998_MASK.
>
> Possible, but not needed I think; both would work.
>
>> Note: since the English language is not native for most of the
>> developers, I usually don't nitpick on these issues provided we can
>> understand the message without too much trouble (and the mistake doesn't
>> stand out aloud, begging for it to be fixed).
>

I also dont nitpick on these.

> I hope you don't mind me pointing them out when they make the reader go
> "huh, a word is missing here", breaking my sentence-parser.
>
> - Marijn

Sure, but I dont expect another version to be sent if that was the only
issue.

>
>> I will fix missing articles when applying, if I don't forget.
>
> <snip>