Re: atomisp kernel driver(s)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Fri, 1 May 2020 10:54:18 +0200
Patrik Gfeller <patrik.gfeller@xxxxxxxxx> escreveu:

> On 01.05.20 00:25, Mauro Carvalho Chehab wrote:
> > Em Thu, 30 Apr 2020 17:09:48 +0200
> > Patrik Gfeller <patrik.gfeller@xxxxxxxxx> escreveu:
> >  
> >> Am 4/30/2020 um 12:55 PM schrieb Mauro Carvalho Chehab:  
> >>> Em Thu, 30 Apr 2020 09:56:53 +0200
> >>> Patrik Gfeller<patrik.gfeller@xxxxxxxxx>  escreveu:
> >>>     
> >>>> For my first test tried to re-compile to module, without the whole
> >>>> kernel. That was a mistake, as I mixed something up, probably it loaded
> >>>> an old version of the module ... to be on the save side the steps I used
> >>>> this time (in case we see something unexpected and for my later reference):
> >>>>
> >>>> $ git log --oneline
> >>>> 4c922df10252 (HEAD -> atomisp, origin/atomisp) media: atomisp2: get rid
> >>>> of ia_css_sc_param.h version dependency
> >>>> ...
> >>>>
> >>>> $ make -j4 clean
> >>>> $ make -j4
> >>>> $ sudo make modules_install INSTALL_MOD_STRIP=1
> >>>> $ sudo make install  
> >>> Please try to build from this branch:
> >>>
> >>> 	https://git.linuxtv.org/mchehab/experimental.git/log/?h=atomisp_v2
> >>>
> >>> You'll need to setup a new config var there. So, please run this before
> >>> make clean. So, for building it, you will do:
> >>>
> >>> 	$ ./scripts/config -e CONFIG_VIDEO_ATOMISP_ISP2401 && make -j modules_prepare
> >>> 	$ make -j4 clean && make -j4
> >>> 	$ sudo make modules_install INSTALL_MOD_STRIP=1 && sudo make install
> >>>
> >>> This won't change the regulator detection, but it should hopefully use
> >>> the ISP2401-specific code, with seems to be needed for your device.  
> >> I've updated to the latest source (git checkout atomisp_v2 && git pull)
> >> and compiled using the instructions above. Compilation worked well, but
> >> the linker had some problems (full log attached):
> >>
> >> ...
> >> ld:
> >> drivers/staging/media/atomisp/pci/css_2401_system/hive_isp_css_2401_system_generated/ia_css_isp_states.o:(.data+0x0):
> >> multiple definition of `ia_css_kernel_init_state';
> >> drivers/staging/media/atomisp/pci/css_2401_csi2p_system/hive_isp_css_2401_system_csi2p_generated/ia_css_isp_states.o:(.data+0x0):
> >> first defined here
> >> ...  
> > Ok. That's because there are two "hive" variants. the building system
> > should use either one of them (but not both at the same time).
> >
> > I didn't get the error before because I was just building a module
> > (that speeds up the development). Such errors only happen on a full
> > build.
> >
> > Fixed.
> >
> > As I did a git rebase (in order to have something that we could
> > upstream later), you'll need to use this procedure to update:
> >
> > 	$ git remote update
> > 	$ git reset --hard origin/atomisp_v2
> >
> > There's no need to clean your last build. Just run:
> >
> > 	$ make -j4
> >
> > And it should build fine this time.  
> 
> Compiled and linked :-). We get some more output this time:

Good!

> 
> [    9.120066] kernel: videodev: Linux video capture interface: v2.00
> 
> [    9.141554] kernel: atomisp_ov2680: module is from the staging 
> directory, the quality is unknown, you have been warned.

Hmm.. your e-mailer is breaking long lines again  :-(

> [    9.175421] kernel: ov2680 i2c-OVTI2680:00: gmin: initializing 
> atomisp module subdev data.PMIC ID 1
> [    9.178755] kernel: ov2680 i2c-OVTI2680:00: supply V1P2A not found, 
> using dummy regulator
> [    9.189966] kernel: proc_thermal 0000:00:0b.0: enabling device (0000 
> -> 0002)  
> [    9.212704] kernel: ov2680 i2c-OVTI2680:00: supply VPROG4B not found, 
> using dummy regulator
> [    9.235024] kernel: ov2680 i2c-OVTI2680:00: supply Regulator1p8v not 
> found, using dummy regulator

I'll check this.

> [    9.235057] kernel: proc_thermal 0000:00:0b.0: Creating sysfs group 
> for PROC_THERMAL_PCI
> [    9.238185] kernel: ov2680 i2c-OVTI2680:00: supply Regulator2p8v not 
> found, using dummy regulator
> [    9.337925] kernel: atomisp: module is from the staging directory, 
> the quality is unknown, you have been warned.
> [    9.404666] kernel: atomisp-isp2 0000:00:03.0: enabling device (0000 
> -> 0002)  
> [    9.408680] kernel: atomisp-isp2 0000:00:03.0: ISP HPLL frequency 
> base = 1600 MHz
> [    9.412197] kernel: atomisp-isp2 0000:00:03.0: Unsupported 
> hw_revision 0x2010

This is related to firmware load stuff. The code use those macros:

	#define ATOMISP_HW_REVISION_MASK	0x0000ff00
	#define ATOMISP_HW_REVISION_SHIFT	8
	#define ATOMISP_HW_REVISION_ISP2300	0x00
	#define ATOMISP_HW_REVISION_ISP2400	0x10
	#define ATOMISP_HW_REVISION_ISP2401_LEGACY 0x11
	#define ATOMISP_HW_REVISION_ISP2401	0x20

	#define ATOMISP_HW_STEPPING_MASK	0x000000ff
	#define ATOMISP_HW_STEPPING_A0		0x00
	#define ATOMISP_HW_STEPPING_B0		0x10

According with the above, 0x2010 would mean ISP2401-B0.

The code itself check those macros in order to load the right firmware:

        if (isp->media_dev.hw_revision ==
            ((ATOMISP_HW_REVISION_ISP2401 << ATOMISP_HW_REVISION_SHIFT)
             | ATOMISP_HW_STEPPING_A0))
                fw_path = "shisp_2401a0_v21.bin";

        if (isp->media_dev.hw_revision ==
            ((ATOMISP_HW_REVISION_ISP2401_LEGACY << ATOMISP_HW_REVISION_SHIFT)
             | ATOMISP_HW_STEPPING_A0))
                fw_path = "shisp_2401a0_legacy_v21.bin";

        if (isp->media_dev.hw_revision ==
            ((ATOMISP_HW_REVISION_ISP2400 << ATOMISP_HW_REVISION_SHIFT)
             | ATOMISP_HW_STEPPING_B0))
                fw_path = "shisp_2400b0_v21.bin";

        if (!fw_path) {
                dev_err(isp->dev, "Unsupported hw_revision 0x%x\n",
                        isp->media_dev.hw_revision);
                return NULL;
        }

It sounds that we need to add:

        if (isp->media_dev.hw_revision ==
            ((ATOMISP_HW_REVISION_ISP2401 << ATOMISP_HW_REVISION_SHIFT)
             | ATOMISP_HW_STEPPING_B0))
                fw_path = "shisp_2401b0_v21.bin";

Eventually, other changes may be needed, depending on how different is
this B0 revision from A0.

Patch for it pushed. Please notice that it will seek for a firmware
named "shisp_2401b0_v21.bin".

This driver will also check if the firmware version is:

	"irci_ecr - master_20150911_0724"

As far as I know, the firmware is linked to the driver's code. 
So, supporting a different firmware version will likely require
changes at the driver.

> [    9.416174] kernel: atomisp-isp2: probe of 0000:00:03.0 failed with 
> error -2

That's because it didn't load the firmware.

Thanks,
Mauro




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux