Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Oct 2017 10:50:14 +0200
From:      Emmanuel Vadot <manu@bidouilliste.com>
To:        Mark Millard <markmi@dsl-only.net>
Cc:        freebsd-arm <freebsd-arm@freebsd.org>, freebsd-hackers <freebsd-hackers@freebsd.org>
Subject:   Re: BPI-M3 booted via a variant of head -r324743 with an external ECHI USB root file system: what I changed to have it happen
Message-ID:  <20171024105014.cd2012898a602408ee605183@bidouilliste.com>
In-Reply-To: <17D6B79E-F7AF-4395-B8A2-2CE9A5157ABF@dsl-only.net>
References:  <3AD6B1F8-512C-43BB-AC76-7721454AD02F@dsl-only.net> <20171021195812.5bdb902401b8e756b6abfe40@bidouilliste.com> <C9F6BF5E-28DB-4569-B71E-EDE2A042FC78@dsl-only.net> <20171021204356.47e3cd6066144bcd07f46699@bidouilliste.com> <50728566-11C2-45EB-8367-00CAF38D4548@dsl-only.net> <B3F39A7C-339B-4072-9E41-A3F9DA1F590B@dsl-only.net> <8696CCFA-AE7D-4324-90A8-BB73402FA124@dsl-only.net> <BF09EA6D-6DE8-4138-AD92-8836DFF28620@dsl-only.net> <06B9A4AD-EA28-41A8-91B9-FE368EF622FE@dsl-only.net> <68CB464E-6FC6-4CB9-963B-9E7A683041EB@dsl-only.net> <EC0D967B-B466-4CE2-83E6-4BAA7724A07D@dsl-only.net> <17D6B79E-F7AF-4395-B8A2-2CE9A5157ABF@dsl-only.net>

next in thread | previous in thread | raw e-mail | index | archive | help

 Top posting as there is too much stuff in that mail.

 I find it really hard to understand you mail as there is too much data
in it.

 But, to clarify the A83T situation (And general info on Allwinner
clocks) :

 - Old Linux DTS (~4.8 iirc) for Allwinner SoCs had the clock directly
defined in them under a /clock nodes, with jmcneill@ we added support
for most (if not all) of them and this supported every Allwinner SoCs.
 - With the H3 DTS added things started to change, they removed
the /clock node and simply add a ccu node (Clock Control Unit) as it's
commonly done in ARM DTS.
 - This move a lot of information from the DTS to the kernel driver for
the CCU.
 - Around that time the first H3 dts that was written (but not added in
the Linux repository) was from the model, with the /clock node. And we
added those file in FreeBSD under sys/boot/fdt/dts
 - I finally wrote a driver for the new clock ccu driver and currently
it support H3, A64 and A31.
 - Linux started to convert old SoCs from /clock to ccu (A13 is done,
A83T too and for A10 and A20 it will be available in 4.15 iirc)
 - I don't want us (us = FreeBSD) to derive from the Linux DTS as it's
a pain to maintain, every change should be sent to Linux directly (it's
really not that hard).

 So, that being said, what needs to be done for A83T support to stay in
FreeBSD is adding a ccu driver for it. With the clkng stuff I did (see
sys/arm/allwinner/clkng) it's not that hard, it's just a matter of
reading the user manual clock section and translate table to
macros/struct. You can have a look at H3 (or any other ccu driver) to
see how it's done.
 As of today support for A83T and A13 don't work anymore if you use
the current DTS, I've started working on A13 and should commit the
driver soon. Someone with A83T should do the same. 

 Cheers,

On Mon, 23 Oct 2017 20:43:50 -0700
Mark Millard <markmi@dsl-only.net> wrote:

> [This largely ignores my questions about
> mp_ncpu <= cpuid happening when there are
> 4 unused cores (of 8), as there are for
> the BPI-M3's A83T support.]
> 
> For head -r324743, by making:
> 
> sys/boot/fdt/dts/arm/a83t.dtsi
> 
> slightly more modern (reg-names, phy_ctrl,
> pmu0, and pmu1) and putting in my guesses
> for A83T in:
> 
> /usr/src/sys/arm/allwinner/aw_usbphy.c
> 
> I've gotten -r324743 to boot with a root
> file system on an external USB drive in
> ECHI mode. I've tried both USB ports and
> both have worked as ECHI for this.
> 
> The changes:
> 
> # svnlite diff /usr/src/sys/boot/fdt/dts/arm/a83t.dtsi
> Index: /usr/src/sys/boot/fdt/dts/arm/a83t.dtsi
> ===================================================================
> --- /usr/src/sys/boot/fdt/dts/arm/a83t.dtsi	(revision 324743)
> +++ /usr/src/sys/boot/fdt/dts/arm/a83t.dtsi	(working copy)
> @@ -179,6 +179,9 @@
>  			reg = <0x01c19400 0x2c>,
>  			      <0x01c1a800 0x4>,
>  			      <0x01c1b800 0x4>;
> +			reg-names = "phy_ctrl",
> +				    "pmu0",
> +				    "pmu1";
>  			clocks = <&usb_clk 8>,
>  				 <&usb_clk 9>,
>  				 <&usb_clk 10>,
> 
> Other than some include file usage, the BPI-M3 is
> not and has not been using sys/gnu/dts/ files. The
> above makes the .dtb that FreeBSD produces be
> something that the modern kernel will not reject
> parts of.
> 
> # svnlite diff /usr/src*/sys/arm/allwinner/aw_usbphy.c
> Index: /usr/src/sys/arm/allwinner/aw_usbphy.c
> ===================================================================
> --- /usr/src/sys/arm/allwinner/aw_usbphy.c	(revision 324743)
> +++ /usr/src/sys/arm/allwinner/aw_usbphy.c	(working copy)
> @@ -58,6 +58,7 @@
>  	AWUSBPHY_TYPE_A13,
>  	AWUSBPHY_TYPE_A20,
>  	AWUSBPHY_TYPE_A31,
> +	AWUSBPHY_TYPE_A83T,
>  	AWUSBPHY_TYPE_H3,
>  	AWUSBPHY_TYPE_A64
>  };
> @@ -90,6 +91,13 @@
>  	.phy0_route = false,
>  };
>  
> +static const struct aw_usbphy_conf a83t_usbphy_conf = {
> +	.num_phys = 3, // SATA via USB bridge as well
> +	.phy_type = AWUSBPHY_TYPE_A83T,
> +	.pmu_unk1 = false, // ????
> +	.phy0_route = true, // ????
> +};
> +
>  static const struct aw_usbphy_conf a31_usbphy_conf = {
>  	.num_phys = 3,
>  	.phy_type = AWUSBPHY_TYPE_A31,
> @@ -116,6 +124,7 @@
>  	{ "allwinner,sun5i-a13-usb-phy",	(uintptr_t)&a13_usbphy_conf },
>  	{ "allwinner,sun6i-a31-usb-phy",	(uintptr_t)&a31_usbphy_conf },
>  	{ "allwinner,sun7i-a20-usb-phy",	(uintptr_t)&a20_usbphy_conf },
> +	{ "allwinner,sun8i-a83t-usb-phy",       (uintptr_t)&a83t_usbphy_conf },
>  	{ "allwinner,sun8i-h3-usb-phy",		(uintptr_t)&h3_usbphy_conf },
>  	{ "allwinner,sun50i-a64-usb-phy",	(uintptr_t)&a64_usbphy_conf },
>  	{ NULL,					0 }
> 
> The SATA is why there are 3 USB phys for the BPI-M3
> instead of 2.
> 
> The root filesystem is on:
> 
> da0: <OWC Envoy Pro mini 0> Fixed Direct Access SPC-4 SCSI device
> da0: Serial Number <NOT-SHOWN>
> da0: 40.000MB/s transfers
> da0: 228936MB (468862128 512 byte sectors)
> da0: quirks=0x2<NO_6_BYTE>
> 
> 
> One new thing is:
> 
> module_register: cannot register simplebus/ahci from kernel; already loaded from kernel
> Module simplebus/ahci failed to register: 17
> module_register: cannot register simplebus/ehci from kernel; already loaded from kernel
> Module simplebus/ehci failed to register: 17
> module_register: cannot register simplebus/pcib from kernel; already loaded from kernel
> Module simplebus/pcib failed to register: 17
> module_register: cannot register simplebus/ehci from kernel; already loaded from kernel
> Module simplebus/ehci failed to register: 17
> 
> I've not figured out what those messages are
> about yet.
> 
> There is also:
> 
> real memory  = 2147483648 (2048 MB)
> avail memory = 2089332736 (1992 MB)
> FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
> 
> vs.
> 
> cpulist0: <Open Firmware CPU Group> on ofwbus0
> cpu0: <Open Firmware CPU> on cpulist0
> cpufreq_dt0: <Generic cpufreq driver> on cpu0
> cpu1: <Open Firmware CPU> on cpulist0
> cpu2: <Open Firmware CPU> on cpulist0
> cpu3: <Open Firmware CPU> on cpulist0
> cpu4: <Open Firmware CPU> on cpulist0
> cpufreq_dt1: <Generic cpufreq driver> on cpu4
> cpufreq_dt1: no regulator for cpu@100
> device_attach: cpufreq_dt1 attach returned 6
> cpu5: <Open Firmware CPU> on cpulist0
> cpu6: <Open Firmware CPU> on cpulist0
> cpu7: <Open Firmware CPU> on cpulist0
> 
> My understanding is: only the first cluster
> of 4 cores is supposed to be active/used
> and the 2nd cluster is supposed to not
> be in active use. I'm not sure that the
> 2nd cluster is being handled as intended,
> or what the intended details are. But
> top does show only 4.
> 
> An old thing is still true:
> 
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00008018
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> a10_mmc1: error rint: 0x00000100
> mmcsd1: 8GB <MMCHC 8WPD3R 0.0 SN E7C6641B MFG 01/2016 by 21 0x0000> at mmc1 52.0MHz/8bit/65535-block
> mmcsd1boot0: 4MB partion 1 at mmcsd1
> mmcsd1boot1: 4MB partion 2 at mmcsd1
> mmcsd1rpmb: 524kB partion 3 at mmcsd1
> 
> 
> FYI:
> 
> # uname -apKU
> FreeBSD bpim3 12.0-CURRENT FreeBSD 12.0-CURRENT  r324743M  arm armv7 1200051 1200051
> 
> 
> 
> ===
> Mark Millard
> markmi at dsl-only.net
> 
> 
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"


-- 
Emmanuel Vadot <manu@bidouilliste.com> <manu@freebsd.org>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20171024105014.cd2012898a602408ee605183>