#007 - Gdy bug w krzemie drzemie...

MAY 17, 202063 MIN
Poziom niżej

#007 - Gdy bug w krzemie drzemie...

MAY 17, 202063 MIN

Description

W siódmym odcinku rozmawiamy o ciekawym aspekcie naszej pracy tj o błędach w układach krzemowych.<br /><br />Praca z producentami układów krzemowych daje niecodzienną możliwość zajrzenia za kulisy rewolucji naszych czasów tj miniaturyzacji układów cyfrowych. Osławione prawo Moore'a niesie ze sobą wykładniczy wzrost gęstości tranzystorów. Co za tym idzie z biegiem czasu układy stają się coraz bardziej skomplikowane a tym samym pomyłki stają się nieuniknione.<br />W trzech krótkich historiach opowiadanych przez członków załogi Semihalf, staramy się przybliżyć wam ciekawe strony pracy z najnowszą technologią, często niosącą bardzo intensywne tygodnie “walki” na styku oprogramowania i sprzętu. Jeśli zastanawialiście się dlaczego aktualizacje firmware (np BIOSU) są konieczne oraz dlaczego procesory zaraz po premierze rynkowej czasami po prostu nie działają jak reklamuje producent, to ten odcinek powinien odpowiedzieć na wasze pytania.<br /><br />Prowadzący: Radosław Biernacki, Jan Dąbroś, Marcin Wojtas, Stanisław Kardach<br /><br />Hashtag: FPGA, VHDL, Ryzen, ARM, hardware, symulator, emulator, bug<br /><br />### Plan odcinka<br /><br /># 6:10 - Od czego zaczyna się projektowanie układów krzemowych<br /># 7:30 - Testowanie i praca z SW - symulatory i emulatory<br /># 9:20 - Dlaczego emulacja jest czasochłonna?<br /># 11:50 - Narodziny krzemu - tapeout<br /># 15:10 - Marcin - historia wdrożenia zarządzania energią w ARMv8<br /># 23:30 - Janek - historia błędu przekierowania przerwań do Arm Trustzone<br /># 30:40 - Staszek - historia błędu w procesorze sieciowym do zastosowań DataPlane<br /># 34:10 - Staszek - historia błedu w ARMv8 w instrukcjach LDP/STP<br /># 42:08 - Łatki w firmware<br /># 48:47 - Quirki i upstream do kernela Linuxa<br /># 1:01:00 - Podsumowanie, jak błędy w krzemie manifestują się u użytkowników<br /><br />### Linki<br /><br /># 6:20 - Fabless chip manufacturing - <a href="https://en.wikipedia.org/wiki/Fabless_manufacturing" rel="noopener">https://en.wikipedia.org/wiki/Fabless_manufacturing</a><br /># 8:50 - Cadance Palladium - <a href="https://www.cadence.com/en_US/home/tools/system-design-and-verification/acceleration-and-emulation/palladium-z1.html" rel="noopener">https://www.cadence.com/en_US/home/tools/system-design-and-verification/acceleration-and-emulation/palladium-z1.html</a><br /># 12:45 - Tape-out - <a href="https://en.wikipedia.org/wiki/Tape-out" rel="noopener">https://en.wikipedia.org/wiki/Tape-out</a><br /># 18:00 - Poziomy uprzywilejowania (Exception levels) na ARMv8<br />Prezentacja ARM Trusted Firmware (ale z fajnym opowiadaniem jak Exception Levels działają) <a href="https://www.slideshare.net/linaroorg/arm-trusted-firmareforarmv8alcu13" rel="noopener">https://www.slideshare.net/linaroorg/arm-trusted-firmareforarmv8alcu13</a><br />Artykuł w magazynie "Programista" numer #63, 08/2017r. "Na granicy światów – technologia bezpieczeństwa ARM TrustZone"<br />Dość szczegółowy opis technologii ARM TrustZone <a href="http://infocenter.arm.com/help/topic/com.arm.doc.prd29-genc-009492c/PRD29-GENC-009492C_trustzone_security_whitepaper.pdf" rel="noopener">http://infocenter.arm.com/help/topic/com.arm.doc.prd29-genc-009492c/PRD29-GENC-009492C_trustzone_security_whitepaper.pdf</a><br /><br /># 18:35 - Power Management na ARMv8<br />Całość problemu opisana w magazynie “Programista” numer #56, 01/2017r. “Zarządzanie energią w ARMv8”<br />Opis przebiegu usypiania systemu podczas Suspend-To-Ram <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/power/suspend-and-cpuhotplug.rst" rel="noopener">https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/power/suspend-and-cpuhotplug.rst</a><br />Opis funkcji zwrotnych zarządzania energią w ARM Trusted Firmware <a href="https://github.com/scorp2kk/atf/blob/master/docs/platform-migration-guide.md#22-composite-power-state-framework-platform-api-modifications" rel="noopener">https://github.com/scorp2kk/atf/blob/master/docs/platform-migration-guide.md#22-composite-power-state-framework-platform-api-modifications</a><br /><br /># 35:10 - Problem atomowości instrukcji LDP/STP:<br /><a href="https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile" rel="noopener">https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile</a> - Arm Architecture Reference Manual, rozdział B2.2.1 Requirements for single-copy atomicity<br /><a href="https://www.element14.com/community/servlet/JiveServlet/previewBody/41836-102-1-229511/ARM.Reference_Manual.pdf" rel="noopener">https://www.element14.com/community/servlet/JiveServlet/previewBody/41836-102-1-229511/ARM.Reference_Manual.pdf</a> - ARMv8 Instruction Set Overview, rozdział 5.2 Memory Access<br /><br /># 51:30 - Upstream quirka do ECAM w ARMv8<br />Dyskusja na listach mailingowych odnośnie możliwości odstępstw od generycznego działania PCIE na ARMv8 opisanego tablicami ACPI <a href="https://lkml.org/lkml/2016/9/20/391" rel="noopener">https://lkml.org/lkml/2016/9/20/391</a><br />Opis Extended Configuration Space (ECAM) dla standardu PCIE <a href="https://wiki.osdev.org/PCI_Express#Extended_Configuration_Space" rel="noopener">https://wiki.osdev.org/PCI_Express#Extended_Configuration_Space</a><br />Obejście problemu niezgodności ze standardowym kontrolerem przy zastosowaniu sztuczki z tablicami ACPI <a href="https://github.com/tianocore/edk2-platforms/commit/a273cb49fe4f98f662bacb69cfd323722e0993a2#diff-e57f3ee89616dd138928c3655287b0d0" rel="noopener">https://github.com/tianocore/edk2-platforms/commit/a273cb49fe4f98f662bacb69cfd323722e0993a2#diff-e57f3ee89616dd138928c3655287b0d0</a><br />Proste rozwiązanie problemu na poziomie sterownika w Linuksie - dozwolone tylko przy opisie poprzez Device Tree <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/controller/pci-host-generic.c#n27" rel="noopener">https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/pci/controller/pci-host-generic.c#n27</a>