There is a hardware bug that it will load
the first 128 bytes of configuration data twice,
it will led to some configure error.
so shift the configuration data 128 bytes,
and make the first 128 bytes all zero,
then hardware will load the 128 zero twice,
and ignore them as garbage.
then the configuration data can be loaded correctly
Signed-off-by: Ming Qian <[email protected]>
Reviewed-by: Mirela Rabulea <[email protected]>
---
drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
index 734e1b65fbc7..ad4213e020f3 100644
--- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
+++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
@@ -519,6 +519,7 @@ static bool mxc_jpeg_alloc_slot_data(struct mxc_jpeg_dev *jpeg,
GFP_ATOMIC);
if (!cfg_stm)
goto err;
+ memset(cfg_stm, 0, MXC_JPEG_MAX_CFG_STREAM);
jpeg->slot_data[slot].cfg_stream_vaddr = cfg_stm;
skip_alloc:
@@ -755,7 +756,7 @@ static unsigned int mxc_jpeg_setup_cfg_stream(void *cfg_stream_vaddr,
u32 fourcc,
u16 w, u16 h)
{
- unsigned int offset = 0;
+ unsigned int offset = 0x80;
u8 *cfg = (u8 *)cfg_stream_vaddr;
struct mxc_jpeg_sof *sof;
struct mxc_jpeg_sos *sos;
--
2.36.1
Hi Ming,
I think have some comments on the code for this would be nice for the
future
On Fri, May 27, 2022 at 03:54:35PM +0800, Ming Qian wrote:
> There is a hardware bug that it will load
> the first 128 bytes of configuration data twice,
> it will led to some configure error.
> so shift the configuration data 128 bytes,
> and make the first 128 bytes all zero,
> then hardware will load the 128 zero twice,
From what I've understood you initialize cfg_stm with zeros then
you start to write the configuration from 0x80 (128 bytes), avoiding the hw issue right?
> and ignore them as garbage.
> then the configuration data can be loaded correctly
>
> Signed-off-by: Ming Qian <[email protected]>
> Reviewed-by: Mirela Rabulea <[email protected]>
> ---
> drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> index 734e1b65fbc7..ad4213e020f3 100644
> --- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> +++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> @@ -519,6 +519,7 @@ static bool mxc_jpeg_alloc_slot_data(struct mxc_jpeg_dev *jpeg,
> GFP_ATOMIC);
> if (!cfg_stm)
> goto err;
> + memset(cfg_stm, 0, MXC_JPEG_MAX_CFG_STREAM);
> jpeg->slot_data[slot].cfg_stream_vaddr = cfg_stm;
>
> skip_alloc:
> @@ -755,7 +756,7 @@ static unsigned int mxc_jpeg_setup_cfg_stream(void *cfg_stream_vaddr,
> u32 fourcc,
> u16 w, u16 h)
> {
> - unsigned int offset = 0;
> + unsigned int offset = 0x80;
> u8 *cfg = (u8 *)cfg_stream_vaddr;
> struct mxc_jpeg_sof *sof;
> struct mxc_jpeg_sos *sos;
> --
> 2.36.1
>
Thanks,
Tommaso
--
Tommaso Merciai
Embedded Linux Engineer
[email protected]
__________________________________
Amarula Solutions SRL
Via Le Canevare 30, 31100 Treviso, Veneto, IT
T. +39 042 243 5310
[email protected]
http://www.amarulasolutions.com