From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eugeniy Paltsev Subject: Re: ns16550 earlycon baud broken on BCM5301X since commit 31cb9a8575ca0 ("earlycon: initialise baud field of earlycon device structure") Date: Thu, 29 Mar 2018 13:17:01 +0000 Message-ID: <1522329420.32101.3.camel@synopsys.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <91A4782EEDF0ED428D4969E253C8E41A@internal.synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: "zajec5@gmail.com" Cc: "gregkh@linuxfoundation.org" , "jonmason@broadcom.com" , "hauke@hauke-m.de" , Alexey Brodkin , "bcm-kernel-feedback-list@broadcom.com" , "linux-serial@vger.kernel.org" , "jslaby@suse.com" , "linux-arm-kernel@lists.infradead.org" List-Id: linux-serial@vger.kernel.org SGkgUmFmYcWCLA0KDQpIbSwgeW91ciAncG9ydC0+dWFydGNsaycgdmFsdWUgKGFuZCB0aGVyZWZv cmUgJ0JBU0VfQkFVRCcgdmFsdWUpIGxvb2tzIHN0cmFuZ2UgdG8gbWUuLi4NCkxvb2tzIGxpa2Ug eW91IGhhdmUgJ0JBU0VfQkFVRCcgc2V0IHRvIDExNTIwMC4NCg0KDQpIZXJlIGlzIG15IGV4YW1w bGU6DQp1YXJ0IGNsb2NrIGlzIDMzMzMzMzMzSHogKGZpeGVkIDMzLjMzTUh6IHh0YWwgY2xvY2sp DQpTbyAnQkFTRV9CQVVEJyBpcyAzMzMzMzMzMy8xNiA9IDIwODMzMzMNClNvICdwb3J0LT51YXJ0 Y2xrJyBpcyBCQVNFX0JBVUQqMTYgPSAzMzMzMzMyOA0KJ2RldmljZS0+YmF1ZCcgaXMgMTE1MjAw ICh3aGljaCBpcyByZWFkIGZyb20gZGV2aWNlIHRyZWUpDQpTbyB3aGVuIHdlIGNhbGN1bGF0ZSBk aXZpc29yIHdpdGggdGhpcyBjb2RlDQotLS0tLS0tLS0tLS0tLS0tLS0tPjgtLS0tLS0tLS0tLS0t LS0NCmRpdmlzb3IgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3J0LT51YXJ0Y2xrLCAxNiAqIGRldmlj ZS0+YmF1ZCk7DQotLS0tLS0tLS0tLS0tLS0tLS0tPjgtLS0tLS0tLS0tLS0tLS0NCldlIGdvdCAn ZGl2aXNvcicgPSAxODEgd2hpY2ggaXMgY29ycmVjdCB2YWx1ZSBmb3IgdXMuDQoNCg0KT24gVGh1 LCAyMDE4LTAzLTI5IGF0IDE0OjM0ICswMjAwLCBSYWZhxYIgTWnFgmVja2kgd3JvdGU6DQo+IEhp LA0KPiANCj4gSSB1cGdyYWRlZCBteSBCQ001MzAxWCBkZXZpY2UgYmFzZWQgb24gQkNNNDcwOCBT b0MgZnJvbSA0LjEzIHRvIDQuMTQNCj4gYW5kIG5vdGljZWQgZWFybHljb24gb3V0cHV0IGlzIGNv cnJ1cHRlZCAoYSB3cm9uZyBiYXVkIHJhdGUgaXMgdXNlZCkuDQo+IA0KPiANCj4gSSBiaXNlY3Rl ZCB0aGlzIHByb2JsZW0gZG93biB0byB0aGU6DQo+IA0KPiBjb21taXQgMzFjYjlhODU3NWNhMDRm NDdlYTExMzQzNGQ0NzgyYjY5NTYzOGI2Mg0KPiBBdXRob3I6IEV1Z2VuaXkgUGFsdHNldiA8RXVn ZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4NCj4gRGF0ZTogICBNb24gQXVnIDIxIDE5OjIyOjEz IDIwMTcgKzAzMDANCj4gDQo+ICAgICBlYXJseWNvbjogaW5pdGlhbGlzZSBiYXVkIGZpZWxkIG9m IGVhcmx5Y29uIGRldmljZSBzdHJ1Y3R1cmUNCj4gDQo+IA0KPiBNeSBkZXZpY2UgdXNlcyBhcmNo L2FybS9ib290L2R0cy9iY200NzA4LmR0c2k6DQo+IA0KPiB1YXJ0MDogc2VyaWFsQDAzMDAgew0K PiAgICAgICAgIGNvbXBhdGlibGUgPSAibnMxNjU1MCI7DQo+ICAgICAgICAgcmVnID0gPDB4MDMw MCAweDEwMD47DQo+ICAgICAgICAgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDg1IElSUV9UWVBFX0xF VkVMX0hJR0g+Ow0KPiAgICAgICAgIGNsb2NrcyA9IDwmaXByb2NzbG93PjsNCj4gICAgICAgICBz dGF0dXMgPSAib2theSI7DQo+IH07DQo+IA0KPiBhbGlhc2VzIHsNCj4gICAgICAgICBzZXJpYWww ID0gJnVhcnQwOw0KPiB9Ow0KPiANCj4gY2hvc2VuIHsNCj4gICAgICAgICBzdGRvdXQtcGF0aCA9 ICJzZXJpYWwwOjExNTIwMG44IjsNCj4gfTsNCj4gDQo+IA0KPiBBIHZhbGlkIFVBUlQgZGl2aXNv ciBmb3IgbXkgZGV2aWNlIGlzIDU0LiBUaGlzIGlzIHdoYXQgYm9vdGxvYWRlciBzZXRzDQo+IGFu ZCB3aGF0IHdvcmtzIHdpdGggbXkgc2VyaWFsIGNvbnNvbGUgcnVubmluZyAxMTUyMDAgOG4xLg0K PiANCj4gDQo+IEJlZm9yZSB0aGUgY29tbWl0IDMxY2I5YTg1NzVjYTAgZWFybHlfc2VyaWFsODI1 MF9zZXR1cCgpIG5ldmVyIHRyaWVkDQo+IHNldHRpbmcgYmF1ZCBiZWNhdXNlIGRldmljZS0+YmF1 ZCB3YXMgMC4gSXQgbGVmdCBiYXVkIChkaXZpc29yKSB0bw0KPiB3aGF0ZXZlciB3YXMgY29uZmln dXJlZCBieSB0aGUgYm9vdGxvYWRlci4gSXQgaGFzIGNoYW5nZWQgd2l0aCBhYm92ZQ0KPiBjb21t aXQgdGhvdWdoLiBTbyBub3cgdGhlIHNldHVwIGxvb2tzIGxpa2UgdGhhdDoNCj4gMSkgcG9ydC0+ dWFydGNsayBlcXVhbHMgMTg0MzIwMCBhcyBzZXQgaW4gdGhlIG9mX3NldHVwX2Vhcmx5Y29uKCk6 DQo+IHBvcnQtPnVhcnRjbGsgPSBCQVNFX0JBVUQgKiAxNjsNCj4gMikgW05FV10gZGV2aWNlLT5i YXVkIGVxdWFscyAxMTUyMDAgYXMgc2V0IGluIHRoZSBvZl9zZXR1cF9lYXJseWNvbigpOg0KPiBl YXJseV9jb25zb2xlX2Rldi5iYXVkID0gc2ltcGxlX3N0cnRvdWwob3B0aW9ucywgTlVMTCwgMCk7 DQo+IChhIHZhbHVlIG9mIG9wdGlvbnMgaXMgIjExNTIwMG44IikNCj4gMykgW05FV10gZGl2aXNv ciBpcyBjYWxjdWxhdGVkIHRvIDEgaW4gdGhlIGluaXRfcG9ydCgpOg0KPiBkaXZpc29yID0gRElW X1JPVU5EX0NMT1NFU1QocG9ydC0+dWFydGNsaywgMTYgKiBkZXZpY2UtPmJhdWQpOw0KPiA0KSBb TkVXXSBkaXZpc29yIGlzIHNldCB1c2luZyBVQVJUX0RMTCBhbmQgVUFSVF9ETE0gaW4gdGhlIGlu aXRfcG9ydCgpDQo+IA0KPiBPYnZpb3VzbHkgc2V0dGluZyBkaXZpc29yIDEgaW5zdGVhZCBvZiA1 NCByZXN1bHRzIGluIGEgd3JvbmcgYmF1ZC4NCj4gDQo+IA0KPiBTbyByaWdodCBub3cgbXkgc2Vy aWFsIGNvbnNvbGUgb3V0cHV0IGxvb2tzIGxpa2UgdGhhdDoNCj4g77+9NjsnK3su77+977+9c++/ vS7vv73vv73vv70uIi7vv73vv70077+977+9Lu+/ve+/ve+/ve+/ve+/vS7vv73vv71KfO+/vS7v v70uOO+/ve+/vS7vv70uLu+/ve+/ve+/ve+/ve+/ve+/vWfvv73vv71+Lu+/ve+/ve+/ve+/vUw+ Lu+/ve+/vSzvv705ejnvv71777+9Wu+/vS4uIu+/ve+/ve+/vU5D77+9PO+/vTku77+9L++/ve+/ ve+/vS7vv70u77+9fe+/ve+/vX4u77+977+977+9Iu+/vS7vv71877+977+977+977+9Oz/vv70u 77+977+9eXnvv70uWw0KPiAgICAwLjA0MzYyM10gY29uc29sZSBbdHR5UzBdIGVuYWJsZWQNCj4g WyAgICAwLjA0MzYyM10gY29uc29sZSBbdHR5UzBdIGVuYWJsZWQNCj4gWyAgICAwLjA1MDg0Ml0g Ym9vdGNvbnNvbGUgW25zMTY1NTBdIGRpc2FibGVkDQo+IFsgICAgMC4wNTA4NDJdIGJvb3Rjb25z b2xlIFtuczE2NTUwXSBkaXNhYmxlZA0KPiBbICAgIDAuMDYyOTM5XSBsaWJwaHk6IEZpeGVkIE1E SU8gQnVzOiBwcm9iZWQNCj4gKC4uLikNCj4gDQo+IEZvciBhIGNvbXBsZXRlIGxvZyAoY29taW5n IGZyb20gZG1lc2cgY29tbWFuZCkgc2VlIGF0dGFjaG1lbnQuDQo+IA0KPiANCj4gQ2FuIHlvdSB0 YWtlIGEgbG9vayBhdCB0aGlzIHByb2JsZW0sIHBsZWFzZT8gSXMgdGhlcmUgc29tZXRoaW5nIHdy b25nDQo+IHdpdGggbXkgRFQ/IE9yIGlzIGEgcHJvYmxlbSBpbiA4MjUwIG9yIGVhcmx5Y29uPw0K PiANCi0tIA0KIEV1Z2VuaXkgUGFsdHNldgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eugeniy.Paltsev@synopsys.com (Eugeniy Paltsev) Date: Thu, 29 Mar 2018 13:17:01 +0000 Subject: ns16550 earlycon baud broken on BCM5301X since commit 31cb9a8575ca0 ("earlycon: initialise baud field of earlycon device structure") In-Reply-To: References: Message-ID: <1522329420.32101.3.camel@synopsys.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Rafa?, Hm, your 'port->uartclk' value (and therefore 'BASE_BAUD' value) looks strange to me... Looks like you have 'BASE_BAUD' set to 115200. Here is my example: uart clock is 33333333Hz (fixed 33.33MHz xtal clock) So 'BASE_BAUD' is 33333333/16 = 2083333 So 'port->uartclk' is BASE_BAUD*16 = 33333328 'device->baud' is 115200 (which is read from device tree) So when we calculate divisor with this code ------------------->8--------------- divisor = DIV_ROUND_CLOSEST(port->uartclk, 16 * device->baud); ------------------->8--------------- We got 'divisor' = 181 which is correct value for us. On Thu, 2018-03-29 at 14:34 +0200, Rafa? Mi?ecki wrote: > Hi, > > I upgraded my BCM5301X device based on BCM4708 SoC from 4.13 to 4.14 > and noticed earlycon output is corrupted (a wrong baud rate is used). > > > I bisected this problem down to the: > > commit 31cb9a8575ca04f47ea113434d4782b695638b62 > Author: Eugeniy Paltsev > Date: Mon Aug 21 19:22:13 2017 +0300 > > earlycon: initialise baud field of earlycon device structure > > > My device uses arch/arm/boot/dts/bcm4708.dtsi: > > uart0: serial at 0300 { > compatible = "ns16550"; > reg = <0x0300 0x100>; > interrupts = ; > clocks = <&iprocslow>; > status = "okay"; > }; > > aliases { > serial0 = &uart0; > }; > > chosen { > stdout-path = "serial0:115200n8"; > }; > > > A valid UART divisor for my device is 54. This is what bootloader sets > and what works with my serial console running 115200 8n1. > > > Before the commit 31cb9a8575ca0 early_serial8250_setup() never tried > setting baud because device->baud was 0. It left baud (divisor) to > whatever was configured by the bootloader. It has changed with above > commit though. So now the setup looks like that: > 1) port->uartclk equals 1843200 as set in the of_setup_earlycon(): > port->uartclk = BASE_BAUD * 16; > 2) [NEW] device->baud equals 115200 as set in the of_setup_earlycon(): > early_console_dev.baud = simple_strtoul(options, NULL, 0); > (a value of options is "115200n8") > 3) [NEW] divisor is calculated to 1 in the init_port(): > divisor = DIV_ROUND_CLOSEST(port->uartclk, 16 * device->baud); > 4) [NEW] divisor is set using UART_DLL and UART_DLM in the init_port() > > Obviously setting divisor 1 instead of 54 results in a wrong baud. > > > So right now my serial console output looks like that: > ?6;'+{.??s?.???.".??4??.?????.??J|?.?.8??.?..??????g??~.????L>.??,?9z9?{?Z?.."???NC? 0.043623] console [ttyS0] enabled > [ 0.043623] console [ttyS0] enabled > [ 0.050842] bootconsole [ns16550] disabled > [ 0.050842] bootconsole [ns16550] disabled > [ 0.062939] libphy: Fixed MDIO Bus: probed > (...) > > For a complete log (coming from dmesg command) see attachment. > > > Can you take a look at this problem, please? Is there something wrong > with my DT? Or is a problem in 8250 or earlycon? > -- Eugeniy Paltsev